首页 > 解决方案 > 如何按值对对象数组进行排序?使用

问题描述

我有一个对象数组,例如

const myArrayOfColors = [
  { color: "red", number: 123 },
  { color: "red", number: 12 },
  { color: "green", number: 6 },
  { color: "blue", number: 7 },
  { color: "purple", number: 54 },
  { color: "green", number: 74 },
  { color: "blue", number: 41 },
  { color: "purple", number: 74 },
];

我有一个字符串数组,必须用作订单参考:

myOrder = ["red", "blue", "purple", "green"];

所以我必须对我的对象数组进行排序以符合我的订单参考。我应该有这样的输出:

const myArrayOfColors = [
  { color: "red", number: 123 },
  { color: "blue", number: 7 },
  { color: "purple", number: 54 },
  { color: "green", number: 6 },
  { color: "red", number: 12 },
  { color: "blue", number: 41 },
  { color: "purple", number: 74 },
  { color: "green", number: 74 },
];

标签: javascriptarrayssortingobject

解决方案


不确定这是最好的方法,你可以试试这个。所以基本上我们运行myArrayOfColors然后循环order查找订单元素,将其推送到结果中,然后在从主源中删除项目之后(myArrayOfColors)。当然想到Time Complexity (assuming n³)这里。(它很大)

const myArrayOfColors = [
  {color: 'red', number: 123},
  {color: 'red',  number: 12},
  {color:'green', number: 6},
  {color: 'blue', number: 7},
  {color:'purple', number:54},
  {color: 'green', number: 74},
  {color:'blue', number:41},
  {color: 'purple', number: 74},
]

const order = ['red', 'blue', 'purple', 'green']
const result = []

while(myArrayOfColors.length) {
 for (const o of order) {
    const colorIndex = myArrayOfColors.findIndex(e => e.color === o)
    if (colorIndex > -1) {
      result.push(myArrayOfColors[colorIndex])
      myArrayOfColors.splice(colorIndex, 1)
    }
  }
}

console.log(result)


推荐阅读