首页 > 解决方案 > 使用另一个数组更新对象数组

问题描述

我需要根据 ES6 中的另一个数组来更新对象数组。例子

let a = [ 
  { id : 23, active :false, status:"" },
  { id : 33, active :false, status:"" },
  { id : 167, active :false, status:"" },
  { id : 18, active :false, status:"" },
  { id : 200, active :false, status:"" },
]

我的第二个包含对象的数组

let marked = [167,33,23];

预期结果如下

let a = [ 
  { id : 23, active :true, status:"updated"},
  { id : 33, active :true, status:"updated" },
  { id : 167, active :true, status:"updated" },
  { id : 18, active :false, status:"" },
  { id : 200, active :false, status:"" },
]

请让我知道如何获得预期的结果。为此,我们在 lodash 中还有其他方法吗?

标签: javascriptarraysobjectecmascript-6lodash

解决方案


你不需要lodash,你可以这样做:

let a = [{
        id: 23,
        active: false
    },
    {
        id: 33,
        active: false
    },
    {
        id: 167,
        active: false
    },
    {
        id: 18,
        active: false
    },
    {
        id: 2,
        active: false
    },
]

let marked = [167, 33, 23];

let result = a.map(x => ({
    ...x,
    active: marked.includes(x.id)
}))
console.log(result)

marked如果您遍历数组并将其元素存储在一个对象中,您可以加快速度。然后在map检查元素x.id是否在对象内部期间会更快(与检查内部数组相比)。但实际上,在大多数情况下,您不应该注意到差异。


推荐阅读