在javascript中折叠属性值上的对象数组

如何转向属性上的折叠和数组:

[ { key: 'black', value: [ '2', '3', '9' ] },
  { key: 'black', value: [ '1' ] },
  { key: 'gold', value: [ '2', '3' ] },
  { key: 'gold', value: [ '1' ] },
  { key: 'red', value: [ '9' ] },
  { key: 'white', value: [ '2', '3' ] },
  { key: 'white', value: [ '1' ] } ]

…到:

[ { key: 'black', value: [ '1', '2', '3', '9' ] },
  { key: 'gold', value: [ '1', '2', '3' ] },
  { key: 'red', value: [ '9' ] },
  { key: 'white', value: [ '1', '2', '3' ] } ]

…用javascript.

我觉得应该有一个相当直接的方法来使用lodash或Array.reduce,但我不能为我的生活找出如何做到这一点.

最佳答案 您可以使用临时对象来引用组,并在单个循环中返回一个结果数组.

var array = [{ key: 'black', value: ['2', '3', '9'] }, { key: 'black', value: ['1'] }, { key: 'gold', value: ['2', '3'] }, { key: 'gold', value: ['1'] }, { key: 'red', value: ['9'] }, { key: 'white', value: ['2', '3'] }, { key: 'white', value: ['1'] }],
    result = [];

array.forEach(function (a) {
    if (!this[a.key]) {
        this[a.key] = { key: a.key, value: [] };
        result.push(this[a.key]);
    }
    this[a.key].value = this[a.key].value.concat(a.value);
    this[a.key].value.sort();
}, {});

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
点赞