javascript - javascript按字符串数组对对象数组进行排序
问题描述
有没有索引的数据结构:
const data = [{
"B": {
"value": 1,
},
"D": {
"value": "45"
},
"E": {
"value": "234"
},
"A": {
"value": "543"
},
"C": {
"value": "250"
}
}, {
"B": {
"value": 6,
},
"D": {
"value": "234"
},
"E": {
"value": "67"
},
"A": {
"value": "78"
},
"C": {
"value": "12"
}
}
]
和字符串数组,上面的数据数组应按其排序:
const strings = ["E", "C", "B", "A", "D"];
是否有解决方案按字符串对数据数组进行排序以获得最终结果,例如:
[{
"E": {
"value": "234",
},
"C": {
"value": "45"
},
"B": {
"value": 1
},
"A": {
"value": "543"
},
"D": {
"value": "250"
}
}...
解决方案
是的,它实际上很容易。
const data = [{
"B": {
"value": 1,
},
"D": {
"value": "45"
},
"E": {
"value": "234"
},
"A": {
"value": "543"
},
"C": {
"value": "250"
}
}, {
"B": {
"value": 6,
},
"D": {
"value": "234"
},
"E": {
"value": "67"
},
"A": {
"value": "78"
},
"C": {
"value": "12"
}
}
]
const strings = ["E", "C", "B", "A", "D"];
const sorted = data.map(obj => {
const res = {};
strings.forEach(key => res[key] = obj[key]);
return res;
});
console.log(sorted);
但是 javascript 不保证对象内部变量的顺序,所以你不应该依赖它。要对其进行排序,您必须使用 ie 数组,它不会是完全相同的数据结构,但它是相似的,它将确保排序。
const data = [{
"B": {
"value": 1,
},
"D": {
"value": "45"
},
"E": {
"value": "234"
},
"A": {
"value": "543"
},
"C": {
"value": "250"
}
}, {
"B": {
"value": 6,
},
"D": {
"value": "234"
},
"E": {
"value": "67"
},
"A": {
"value": "78"
},
"C": {
"value": "12"
}
}
]
const strings = ["E", "C", "B", "A", "D"];
const sorted = data.map(obj => {
const res = [];
strings.forEach(key => {
const newObj = {};
newObj[key] = obj[key];
res.push(newObj)
});
return res;
});
console.log(sorted);
推荐阅读
- c++ - 如何通过 C++ 连接到我的 SQL 数据库?
- node.js - Expess 节点错误 : Throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn))
- javascript - 无法使用 Redux 读取未定义的属性“参数”
- python - 将数据显示为插入语句
- c++ - 如何指示 MS Visual C++ 编译器使用未初始化的 __m512i 寄存器
- python - 如何在matplotlib中从训练集的每个点到曲面平面绘制一条垂直线
- c++ - 编写兼容 STL 的容器 - 隐含要求
- project-reactor - BufferAsyncSink 正在序列化流
- jquery - 添加 .is-invalid 类后重新验证
- syslog - 为什么不能从远程客户端发送系统日志事件?