使用参考数组手动对数组进行排序

时间:2019-06-14 15:22:39

标签: javascript

const order = ['b', 'c', 'a'];

const objects = [
  { name: 'a' },
  { name: 'b' },
  { name: 'c' },
];

试图找出使用手动objects数组按名称对order数组进行排序的最有效方法。

2 个答案:

答案 0 :(得分:6)

这里是sortindexOf的快速用法。

const order = ['b', 'c', 'a'];

const objects = [
  { name: 'a' },
  { name: 'b' },
  { name: 'c' },
];

const sortedObjects = objects.sort((o1, o2) => order.indexOf(o1.name) - order.indexOf(o2.name));

console.log(sortedObjects);

具有缓存的索引:

const order = ['b', 'c', 'a'].reduce((acc, elt, index) => (acc[elt] = index, acc), {});

const objects = [
  { name: 'a' },
  { name: 'b' },
  { name: 'c' },
];

const sortedObjects = objects.sort((o1, o2) => order[o1.name] - order[o2.name]);

console.log(sortedObjects);

答案 1 :(得分:2)

您可以使用Object.entries()Object.fromEntries()来缓存索引,以将order对象重新排列到查找表中:

const order = ['b', 'c', 'a'];

const objects = [
  { name: 'a' },
  { name: 'b' },
  { name: 'c' },
];

const lut = Object.fromEntries(
  Object.entries(order).map(entry => entry.reverse())
);

objects.sort((a, b) => lut[a.name] - lut[b.name]);

console.log(objects);