Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript/lodash:传播属性的更干净的方式?_Javascript_Lodash - Fatal编程技术网

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”出现在两个对象上。