首页 > 解决方案 > 在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"}
]

标签: javascriptarrayssorting

解决方案


您可以映射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);


推荐阅读