Given array:
var someAnswers = [
{
answer: 'Lyndon Johnson', // answer A
comment: '...'
},
{
answer: 'Richard Nixon', // answer B
comment: '...'
},
{
answer: 'Jimmy Carter', // answer C
comment: '...'
},
{
answer: 'Gerald Ford', // answer D
comment: '...'
}
];
Some custom order:
customOrder = 'A, C, B, D';
or
customOrder = ['A', 'C', 'B', 'D'];
Do something like this:
someAnswers.sort(customOrder);
Desired result:
[
{
"answer": "Lyndon Johnson",
"comment": "..."
},
{
"answer": "Jimmy Carter",
"comment": "..."
},
{
"answer": "Richard Nixon",
"comment": "..."
},
{
"answer": "Gerald Ford",
"comment": "..."
}
]
Another custom order:
anotherCustomOrder = 'D, B, A, C';
or
anotherCustomOrder = ['D', 'B', 'A', 'C'];
Do something like this:
someAnswers.sort(anotherCustomOrder);
Desired result:
[
{
"answer": "Gerald Ford",
"comment": "..."
},
{
"answer": "Richard Nixon",
"comment": "..."
},
{
"answer": "Lyndon Johnson",
"comment": "..."
},
{
"answer": "Jimmy Carter",
"comment": "..."
}
]
If you were willing to replace the letters with numbers in customOrder, you could do something like this:
customOrder = [0, 2, 1, 3];
sort(someAnswers, customOrder) {
res = [];
customOrder.forEach((n) => {
res.push(someAnswers[n]);
}
return res;
}
Alternatively, if you really want to use letters:
customOrder = ["A", "C", "B", "D"];
sort(someAnswers, customOrder) {
res = [];
customOrder.forEach((n) => {
res.push(someAnswers[n.charCodeAt(0) - 65]);
}
return res;
}
You can create an object with the indexes according to the desired order, and then use the function Array.prototype.map and extract the values by using the previously created indexes array.
const someAnswers = [ { answer: 'Lyndon Johnson', comment: '...' }, { answer: 'Richard Nixon', comment: '...' }, { answer: 'Jimmy Carter', comment: '...' }, { answer: 'Gerald Ford', comment: '...' }],
answerIndexes = ['A', 'B', 'C', 'D'].reduce((a, c, i) => ({...a, [c]: i}), {}),
customOrder = ['A', 'C', 'B', 'D'],
sorted = customOrder.map(L => someAnswers[answerIndexes[L]]);
console.log(sorted);
.as-console-wrapper { max-height: 100% !important; top: 0; }
const sorting = (currentArray, indexArr) => {
const reArrangedArr = [];
const deepCopied = JSON.parse(JSON.stringify(currentArray));
indexArr.forEach(index => reArrangedArr.push(deepCopied[index]));
return reArrangedArr;
}
var someAnswers = [
{
answer: 'Lyndon Johnson', // answer A
comment: '...'
},
{
answer: 'Richard Nixon', // answer B
comment: '...'
},
{
answer: 'Jimmy Carter', // answer C
comment: '...'
},
{
answer: 'Gerald Ford', // answer D
comment: '...'
}
];
console.log(sorting(someAnswers, [3,0,1,2]))