合并 2 个数组,保留内部元素数组值

Merge 2 arrays keeping inner elements array values

我正在尝试合并 2 个对象,其中一个元素包含数组。使用扩展语法时,我没有获得 disered 结果,并且第一个对象数组被第二个对象数组替换。对象如下所示:

const objectA1 = {
    keyA1:'valueA1',
    keyArr:[{
            arrKeyA01:'arrValueA01',
            arrKeyA02:'arrValueA02',
        },
        {
            arrKeyA11:'arrValueA11',
            arrKeyA12:'arrValueA12',
        }
    ]
}

const objectB1 = {
    keyB1:'valueB1',
    keyArr:[{
            arrKeyB01:'arrValueB01',
            arrKeyB02:'arrValueB02',
        },
        {
            arrKeyB11:'arrValueB11',
            arrKeyB12:'arrValueB12',
        }
    ]
}

我想得到:

const objectRes = {
    keyA1:'valueA1',
    keyB1:'valueB1',
    keyArr:[{
            arrKeyA01:'arrValueA01',
            arrKeyA02:'arrValueA02',
            arrKeyB01:'arrValueB01',
            arrKeyB02:'arrValueB02',
        },
        {
            arrKeyA11:'arrValueA11',
            arrKeyA12:'arrValueA12',
            arrKeyB11:'arrValueB11',
            arrKeyB12:'arrValueB12',
        }
    ]
}

我用的是

{...objectA1 ,...objectB1}

但如前所述,keyArr 不保留 objectA1 元素。

如何合并两个对象并使用扩展语法保留数组数据?

感谢任何 comment/help :)

创建一个对象并放置 A1 和 B2 对象的前 2 个值。使用 reduce

单独自定义数组

const objectA1 = {
  keyA1: 'valueA1',
  keyArr: [{
      arrKeyA01: 'arrValueA01',
      arrKeyA02: 'arrValueA02',
    },
    {
      arrKeyA11: 'arrValueA11',
      arrKeyA12: 'arrValueA12',
    }
  ]
}

const objectB1 = {
  keyB1: 'valueB1',
  keyArr: [{
      arrKeyB01: 'arrValueB01',
      arrKeyB02: 'arrValueB02',
    },
    {
      arrKeyB11: 'arrValueB11',
      arrKeyB12: 'arrValueB12',
    }
  ]
}

const arr = objectA1.keyArr.reduce((acc, x) => {
  const res1 = objectB1.keyArr.reduce((acc2, y) => ({...x,...y}), {})
  return acc = [...acc, res1];
}, [])

const result = {
  keyA1: objectA1.keyA1,
  keyB1: objectB1.keyB1,
  keyArr: arr
}

console.log(result)

我想分享我解决这个问题的尝试,我使用数组将其合并为一个循环:

const objectA1 = {
  keyA1:'valueA1',
  keyArr:[{
     arrKeyA01:'arrValueA01',
     arrKeyA02:'arrValueA02',
     },
     {
     arrKeyA11:'arrValueA11',
     arrKeyA12:'arrValueA12',
     }
 ]
 }

  const objectB1 = {
      keyB1:'valueB1',
      keyArr:[{
              arrKeyB01:'arrValueB01',
              arrKeyB02:'arrValueB02',
          },
          {
              arrKeyB11:'arrValueB11',
              arrKeyB12:'arrValueB12',
          }
      ]
  }
objects = [objectA1, objectB1];
let i = 0;
new_array = {};
for(i; i < objects.length; i++){
  object = objects[i];
  keys = Object.keys(object);
  for(j = 0; j < keys.length; j++){
    //if property already exists, example keyArr
    this_key = keys[j];
    console.log(this_key);
    if(new_array[this_key] != undefined){
      //loop through that property in the object
      object[this_key].forEach((object_value, index) => {
        //add all properties that previous object did not have
        Object.assign(new_array[this_key][index], object_value);
      });
    }else{
      //initialize that value with the first element array
      new_array[this_key] = object[this_key];
    }
  }
}
console.log(objects);
console.log(new_array);