我正在迭代可能具有相同键的对象,例如:
let data = {};
// object 1
metadata:{
datefrom: '2001'
}
// objeft 2
metadata:{
dateto: '2002'
}
因此,在迭代时,它们具有相同的变量名objDataEl
。
我正在尝试将它们分配给data
对象,但问题是只分配了最后一个。
我试过这样做:
data = Object.assign(data, objDataEl);
和
// strDataKey is = 'metadata'
data[strDataKey] = objDataEl;
但是在这两种情况下它都被覆盖了,只有最后一个值被插入到对象中。
在尝试后,它应该是这样的:
data: {
metadata: {
datefrom: '2001',
dateto: '2002'
}
}
数据结构如下所示:
data = [ { "metadata" : { "datefrom" : 2001 } }, { "metadata" : { "dateto" : 2015 } } ];
如何实现这一目标?
答案 0 :(得分:1)
简单的数组缩减就可以了。
var mergeProperty = function mergeProperty( propertyName ) {
return function( aggregation, record ) {
aggregation[ propertyName ] = Object.assign( aggregation[ propertyName ] || {}, record[ propertyName ] );
return aggregation;
};
};
var data = [
{ "metadata" : { "datefrom" : 2001 } },
{ "metadata" : { "dateto" : 2015 } }
];
var result = data.reduce( mergeProperty( 'metadata' ), {} );
// ES6
const mergePropertyES6 = propertyName => ( aggregation, record ) => {
aggregation[ propertyName ] = Object.assign( aggregation[ propertyName ] || {}, record[ propertyName ] );
return aggregation;
};
const dataES6 = [
{ "metadata" : { "datefrom" : 2001 } },
{ "metadata" : { "dateto" : 2015 } }
];
const resultES6 = dataES6.reduce( mergePropertyES6( 'metadata' ), {} );
console.log( result );
console.log( resultES6 );