Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.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 指定和合并具有相同键值的多个嵌套对象_Javascript_Object_Assign - Fatal编程技术网

Javascript 指定和合并具有相同键值的多个嵌套对象

Javascript 指定和合并具有相同键值的多个嵌套对象,javascript,object,assign,Javascript,Object,Assign,我正在迭代可能具有相同键的对象,例如: let data = {}; // object 1 metadata:{ datefrom: '2001' } // objeft 2 metadata:{ dateto: '2002' } 因此,在迭代时,它们具有相同的变量名objDataEl 我试图将它们分配给数据对象,但问题是只分配最后一个 我试过这样做: data = Object.assign(data, objDataEl); 及 但在这两种情况下,它都被覆盖,只有最后一个值被插

我正在迭代可能具有相同键的对象,例如:

let data = {};
// object 1
metadata:{
  datefrom: '2001'
}
// objeft 2
metadata:{
  dateto: '2002'
}
因此,在迭代时,它们具有相同的变量名
objDataEl

我试图将它们分配给
数据
对象,但问题是只分配最后一个

我试过这样做:

data = Object.assign(data, objDataEl);

但在这两种情况下,它都被覆盖,只有最后一个值被插入到对象中

经过反复试验后,应如下所示:

data: {
  metadata: {
    datefrom: '2001',
    dateto: '2002'
  }
}
data = [ { "metadata" : { "datefrom" : 2001 } }, { "metadata" : { "dateto" : 2015 } } ];
数据结构如下所示:

data: {
  metadata: {
    datefrom: '2001',
    dateto: '2002'
  }
}
data = [ { "metadata" : { "datefrom" : 2001 } }, { "metadata" : { "dateto" : 2015 } } ];

如何做到这一点

一个简单的数组缩减就可以了

var mergeProperty=函数mergeProperty(propertyName){
返回函数(聚合、记录){
聚合[propertyName]=Object.assign(聚合[propertyName]| |{},记录[propertyName]);
收益聚合;
};
};
风险值数据=[
{“元数据”:{“日期自”:2001},
{“元数据”:{“日期到”:2015}
];
var result=data.reduce(mergeProperty('metadata'),{});
//ES6
const mergePropertyES6=propertyName=>(聚合,记录)=>{
聚合[propertyName]=Object.assign(聚合[propertyName]| |{},记录[propertyName]);
收益聚合;
};
常量数据6=[
{“元数据”:{“日期自”:2001},
{“元数据”:{“日期到”:2015}
];
const resultES6=dataES6.reduce(mergePropertyES6('metadata'),{});
控制台日志(结果);

控制台日志(结果6)请向我们展示包含您正在迭代的对象的数据结构。@GeorgeJempty metadata的可能重复项就是该结构。是的,但数据不能有多个名为metadata的属性,因此数据必须是数组而不是对象,或者在数组中有多个具有元数据属性的数据对象。因此,您希望循环的整个内容的结构确实很重要。我理解这一点,但元数据应该仅用作属性插入位置的关键引用