【问题标题】:Sort array by specific order [duplicate]按特定顺序对数组进行排序[重复]
【发布时间】:2020-11-26 09:00:41
【问题描述】:

我有一个数组

peeps = [{name: "Mike", age: 31},{name: "Dave", age: 31},{name: "Delta", age: 31},{name: "Clint", age: 31}] 

我需要按任意顺序对它们进行排序

newOrder = ['Delta', 'Dave', 'Mike', 'Clint']

我将如何引用newOrder 来对peeps 进行排序,还要记住peeps 中的数据不保证包含newOrder 中的所有名称

【问题讨论】:

  • 请添加您的代码。你试过什么?
  • 名称将是已知的,newOrder 将是静态的,但 peeps 可能具有所有名称或只有 1 个名称。我试图通过按字母顺序排序然后颠倒顺序来找出一种方法,但我无法弄清楚。

标签: javascript sorting


【解决方案1】:

const peeps = [
  { name: 'Mike', age: 31 },
  { name: 'Dave', age: 31 },
  { name: 'Delta', age: 31 },
  { name: 'Clint', age: 31 }
];
const newOrder = ['Delta', 'Dave', 'Mike', 'Clint'];

peeps.sort((a, b) => newOrder.indexOf(a.name) - newOrder.indexOf(b.name));

console.log(peeps);

【讨论】:

    【解决方案2】:

    这是一种方式:

    const peeps = [{name: "Mike", age: 31},{name: "Dave", age: 31},{name: "Delta", age: 31},{name: "Clint", age: 31}];
    const newOrder = ['Delta', 'Dave', 'Mike', 'Clint'];
    
    const notInNewOrder = peeps.filter(i => !newOrder.includes(i.name));
    
    const response = newOrder.map(n => ({...peeps.find(peep=> peep.name === n)}));
    
    console.log(response.concat(notInNewOrder));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 2021-09-10
      相关资源
      最近更新 更多