分配和合并具有相同键值的多个嵌套对象

Assigning and merging multiple nested objects with same key value

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

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 } } ];

如何实现?

一个简单的数组缩减就可以解决问题。

        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 );