如何有效地匹配两个不同 javascript 对象的 ID 并将它们合并在一起?

How to efficiently match ids on two different javascript objects and merge them together?

这有点类似于联接 table。我有两个不同的 javascript 对象。这些对象之一是一个对象数组,其中该对象中的一个属性是一个 id 数组。这些 id 直接映射到另一个 javascript 对象数组。

例如

users = [{
  name: 'Bob',
  birthday: '01-02-1990',
  favorite_color_ids: ['2', '4', '6']
},
{
....etc

}]

colors: [{
  id: 2,
  name: 'red',
  hex_val: '#FF0000'
},
{
  ...etc
}]

我想在用户数组中的每个对象上创建另一个 属性,称为 'favorite_color_names'。最有效的方法是什么?目前有许多嵌套的 _.each 操作。

扩展我上面的评论,如果您需要经常通过 ID 访问颜色,但不能更改数组的结构,我会继续动态创建一个对象结构,通过编号.

var colors_by_id = {}

colors.forEach(color) {
    colors_by_id[color.id] = color
})

然后,如果您希望为每个用户创建名称数组(尽管它看起来不那么重要,因为您现在可以轻松地即时获取它).

users.forEach(user) {
    user.favorite_color_names = user.favorite_color_ids.map(function(id) {
        return colors_by_id[id].name
    })
})