Javascript:根据另一个对象数组对对象数组进行排序

时间:2021-01-19 13:23:03

标签: javascript

我有两个数组:

原始数组:

[{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'}]

你能指导我如何进行这种排序吗?我只是不知道从哪里开始?

2 个答案:

答案 0 :(得分:0)

您可以为想要的订单取一个对象并按原始订单的delty进行排序。

这种方法也允许将未知的 id 排序到想要的位置。如果是这样取

  • n 表示数组内的任何位置,
  • -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);