合并json对象

时间:2018-08-06 12:41:14

标签: angular typescript

我有这种json:

const a = [{
  value: 5,
  sum: 32,
},
{
  value 6,
  sum: 32,
}]

如何获得此结果:

const a = [{
  value1: 5,
  value2: 6,
  sum: 32
}]

我知道我有“钥匙”碰撞。有可能得到那个结果吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

好吧,从理论上讲,您可以合并所有道具,并维护索引以随意创建最新的键。

可以按照以下代码片段进行操作,但是我并没有对此进行全面的测试。

我确实没有看到合并数据的好处,因为似乎突然所有的上下文都将丢失,您怎么知道哪个sum与哪个value

const a = [{
  value: 5,
  sum: 32,
},
{
  value: 6,
  sum: 32,
},
{
  value: 7,
  sum: 16
},
{
  value: 5,
  sum: 16
}];

function mergeObjectsInArray( array ) {
  const keys = {};
  return [ array.reduce( (current, item) => {
    Object.keys( item ).forEach( key => {
      let target = key;
      if (keys[key]) {
        if (current[key] === item[key]) {
          // same value
          return;
        }
        for (let i = 1; i <= keys[key]; i++) {
          if (current[key+i] === item[key]) {
            // same value in previous iterations
            return;
          }
        }
        target = key + (++keys[key]);
        if (keys[key] === 2) {
          // delete the original key and replace it with key1
          // only needs to happen once
          let temp = current[key];
          delete current[key];
          current[key+'1'] = temp;
        }
        current[target] = item[key];
        return;
      }
      keys[key] = 1;
      current[target] = item[key];
    } );
    return current;
  }, {})];
}

console.log( mergeObjectsInArray( a ) );