我有两个数组:
const originalArray = ['a', 'n', 'u', 'b', 'd', 'z'];
const sortOrder = ['n', 'z'];
所以我希望输出为 ['n', 'z', 'a', 'u', 'b', 'd'];
基本上是 originalArray 的顺序按照 secondArray 的顺序排序。
我可以基于第二个数组从原始数组中弹出元素,然后可以将它们追加到前面,这将给我所需的解决方案,但不确定这是否有效或者是否有更好的方法来使用array.sort(fxn)
;
const originalArray = ['a', 'n', 'u', 'b', 'd', 'z'];
const sortOrder = ['n', 'z'];
const reverseOrder = sortOrder.reverse();
for (let elem of reverseOrder) {
const indexofelem = originalArray.indexOf(elem);
originalArray.unshift(originalArray.splice(indexofelem, 1)[0]);
}
console.log(originalArray);
最佳答案
您可以根据 sortOrder
数组中的匹配索引创建排序函数。
const originalArray = ['a', 'n', 'u', 'b', 'd', 'z'];
const sortOrder = ['n', 'z'];
function sortArrays(a, b) {
var indexOfA = sortOrder.indexOf(a),
indexOfB = sortOrder.indexOf(b);
if (indexOfA == -1) {
indexOfA = sortOrder.length + 1;
}
if (indexOfB == -1) {
indexOfB = sortOrder.length + 1;
}
if (indexOfA < indexOfB) {
return -1;
}
if (indexOfA > indexOfB) {
return 1;
}
return 0;
}
originalArray.sort(sortArrays);
console.log(originalArray);
.as-console-wrapper {
max-height: 100% !important;
top: 0;
}
关于javascript - 根据javascript中的另一个数组对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44755061/