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的属性,因此数据必须是数组而不是对象,或者在数组中有多个具有元数据属性的数据对象。因此,您希望循环的整个内容的结构确实很重要。我理解这一点,但元数据应该仅用作属性插入位置的关键引用