javascript - 如何按值对对象数组进行排序?使用
问题描述
我有一个对象数组,例如
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 },
];
解决方案
不确定这是最好的方法,你可以试试这个。所以基本上我们运行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)
推荐阅读
- mysql - QMYSQL - 未加载驱动程序
- javascript - 用作字典键的 Flask 参数
- android - 前置摄像头视频录制应该像 ScapChat 一样水平翻转
- angular - PWA:在应用程序的某些部分排除缓存
- python - 如何将差分方程应用于for循环内的numpy数组
- ios - 无法在 swift4 中使用 Almofire 从 JSON 响应中提取令牌
- java - 如何创建包含自定义对象的包的自定义实例?
- python-3.x - 如何将列表中的每个第二个元素转换为 int 格式?
- python - 使用 Scikit-Learn 使用分类数据制作回归模型
- mysql - 我可以在mysql中使用哪种类型