我有两个数组:
原始数组:
[{id:1, name:'A'},{id:2, name:'B'},{id:3, name:'C'},{id:4, name:'D'},{id:5, name:'E'}]
还有一个数组:
新数组:
[{id:3, name:'C'},{id:5, name:'E'},{id:2, name:'B'}]
我希望新的数组按照原数组的id排序,结果如下:
排序后的新数组
[{id:2, name:'B'},{id:3, name:'C'},{id:5, name:'E'}]
你能指导我如何进行这种排序吗?我只是不知道从哪里开始?
答案 0 :(得分:0)
您可以为想要的订单取一个对象并按原始订单的delty进行排序。
这种方法也允许将未知的 id
排序到想要的位置。如果是这样取
-Number.MAX_VALUE
代表最高位置或Number.MAX_VALUE
用于排序到最后。那么你需要如下回调:
(order[a.id] || position) - (order[b.id] || position)
const
original = [{ id: 1, name: 'A' }, { id: 2, name: 'B' }, { id: 3, name: 'C' }, { id: 4, name: 'D' }, { id: 5, name: 'E' }],
data = [{ id: 3, name: 'C' }, { id: 5, name: 'E' }, { id: 2, name: 'B' }],
order = Object.fromEntries(original.map(({ id }, i) => [id, i + 1]));
data.sort((a, b) => order[a.id] - order[b.id]);
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
使用 Array.reduce
对数据进行排序。
const arr1 = [{id:1, name:'A'},{id:2, name:'B'},{id:3, name:'C'},{id:4, name:'D'},{id:5, name:'E'}];
const arr2 = [{id:3, name:'C'},{id:5, name:'E'},{id:2, name:'B'}];
const sortedArray2 = arr1.reduce((tmp, x) => {
const elem = arr2.find(y => y.id === x.id);
return elem ? [
...tmp,
elem,
] : tmp;
}, []);
console.log(sortedArray2);