javascript - 在javascript中按另一个数组值的顺序对对象数组进行排序的优化方法
问题描述
我有一组 id 和一组对象。
var ids = [4, 2, 5, 8]
var objs = [
{"id": 2, "name": "a"},
{"id": 4, "name": "b"},
{"id": 8, "name": "c"},
{"id": 5, "name": "d"}
]
我想按数组objs
中给出的值的顺序排序。
所以排序的对象应该是 ids
[
{"id": 4, "name": "a"},
{"id": 2, "name": "b"},
{"id": 5, "name": "c"},
{"id": 8, "name": "d"}
]
解决方案
您可以映射ids
数组,例如:
const ids = [4, 2, 5, 8]
const objs = [{
"id": 2,
"name": "a"
},
{
"id": 4,
"name": "b"
},
{
"id": 8,
"name": "c"
},
{
"id": 5,
"name": "d"
}
]
const result = ids.map(id => objs.find((o) => o.id == id));
console.log(result);
为了更有效地执行此操作,您可以使用:
const ids = [4, 2, 5, 8]
const objs = [{
"id": 2,
"name": "a"
},
{
"id": 4,
"name": "b"
},
{
"id": 8,
"name": "c"
},
{
"id": 5,
"name": "d"
}
];
const map = objs.reduce((a, c) => (a[c.id] = c, a),{});
const result = ids.map(id => map[id]);
console.log(result);
推荐阅读
- vim - 自定义 Vim 写入功能以制作备份副本
- awk - 是否有 INT_MIN 和 INT_MAX 的 awk 等效项?
- android - Ionic build android 与谷歌服务版本冲突
- c++ - 没有找到运算符 << 尽管定义了一个,但它采用 Foo 类型的右手操作数
- c - 如何在c中将数字存储在字符串中
- java - Android RectF.intersects(RectF a, RectF b) 在 Canvas SurfaceView 中不起作用
- python - Django 用户权限/视图?
- bash - Python脚本手动工作,但不是来自cron作业
- python - `combineByKey`,pyspark
- java - 如何让一个简单的 HelloWorld 应用程序在 Spring Boot 中运行