javascript/lodash:传播属性的更干净的方式?
我在下面有一段数据。该对象包含两个嵌套对象,其中嵌套了数组:javascript/lodash:传播属性的更干净的方式?,javascript,lodash,Javascript,Lodash,我在下面有一段数据。该对象包含两个嵌套对象,其中嵌套了数组: let data = { obj1: { names: ['joe'], ages: false, }, obj2: { names: ['james'], ages: true, }, } 我想返回: { names: ['james','joe'], ages: true, } 现在,我正在做这件事: const foo
let data = {
obj1: {
names: ['joe'],
ages: false,
},
obj2: {
names: ['james'],
ages: true,
},
}
我想返回:
{
names: ['james','joe'],
ages: true,
}
现在,我正在做这件事:
const foo = Object.entries(data)[0][1] ?? [];
const foo2 = Object.entries(data)?.[1]?.[1] ?? [];
const finalData = {...foo, ...foo2 }
如何使用loDash的groupBy清理这些内容?使用.values()
获取两个子对象,然后使用.mergeWith()
合并它们。如果值是一个数组,则将其合并,如果不允许,则让.mergeWith()
通过返回未定义的来处理合并:
const数据={
obj1:{
姓名:[“乔”、“詹姆斯”],
年龄:假,
},
obj2:{
姓名:[“詹姆斯”],
年龄:对,
},
}
const result=ux0.mergeWith(
{},…{.值(数据),
(a,b)=>u.isArray(a)?u.uniq([…a,…b]):未定义
)
console.log(结果)
为什么年龄:true
?它只是一个布尔值。第二个对象的ages
值应始终覆盖第一个对象。如何定义“第二个”?你真的要依赖对象属性的顺序吗?如果顺序很重要,那么您真的应该使用一个数组……这不是复制数据而不是合并吗?如果每个对象都有名称:['joe'],
您最终会得到['joe','joe']
如果您还想进行重复数据消除,请使用uniq函数。我会把它添加到答案中。好的,如果你能看到,那就太好了。谢谢答案已更新。您可以看到“james”出现在两个对象上。