基于另外两个对象数组创建对象数组

我有两个对象数组,我想基于它们创建第三个对象并添加一些新的键/值。


基础数据


const oldArray = [

{id: 1, name: 'Test', age: 25, skill: 120}, 

{id: 2, name: 'Test25', age: 10, skill: 120}];

修改后的数据


const newArray = [

{id: 1, name: 'Test2', age: 50, skill: 200},

{id: 2, name: 'Test25', age: 25, skill: 120}];

我想收到类似的东西:


const expectedResultArray = [

  {id: 1, oldName: 'Test', newName: 'Test2', oldAge: 25, newAge: 50, ageDifference: 25, oldSkill: 120, newSkill: 200, skillDifference: 80 },

  {id: 2, oldName: 'Test25', newName:'Test25', oldAge: 10, newAge: 25, ageDifference: 15, oldSkill:120, newSkill: 120, skillDefference: 0}]

如您所见,预期数组是基于两个数组的旧计算和全新计算的组合。我怎样才能做到这一点?我试过reduce()但是我被困在尝试中:


var createNewArray = (...objects) => 

  Object.values(objects.reduce((a, e) => {

    a[e.id] = a[e.id] || {id: e.id};

  // struggling to proceed here 


    return a;

  }, {}))

;


console.log(createNewArr(...oldArray, ...newArray));


慕标琳琳
浏览 191回答 2
2回答

陪伴而非守候

如果对象的顺序相同,那么您可以试试这个。否则我们需要根据id.const oldArray = [{id: 1, name: 'Test', age: 25, skill: 120}, {id: 2, name: 'Test25', age: 10, skill: 120}];const newArray = [{id: 1, name: 'Test2', age: 50, skill: 200},{id: 2, name: 'Test25', age: 25, skill: 120}];const Result = newArray.map((item, i) => {  let oldConverted = renameObject(oldArray[i], 'old');  let newConverted = renameObject(item, 'new');  newConverted.ageDifference = newConverted.newAge - oldConverted.oldAge;  newConverted.skillDefference = newConverted.newSkill - oldConverted.oldSkill;  return Object.assign({}, newConverted, oldConverted);});function renameObject(obj, type) {  let newObj = {};  newObj.id = obj.id;  Object.keys(obj).forEach((key) => {    if (key != 'id') {      newObj[type + capitalize(key)] = obj[key];    }  });  return newObj;}function capitalize(string) {  return string.charAt(0).toUpperCase() + string.slice(1);}console.log(Result);

倚天杖

好吧,解决方案比我预期的要容易......(Facepalm)const oldArray = [{id: 1, name: 'Test', age: 25, skill: 120},  {id: 2, name: 'Test25', age: 10, skill: 120}];const newArray = [{id: 1, name: 'Test2', age: 50, skill: 200}, {id: 2, name: 'Test25', age: 25, skill: 120}];const generateNewArr = () => { return oldArray.map((row,index) => {   return {     id: row.id,     oldName: row.name,     newName: newArray[index].name,     oldAge: row.age,     newAge: newArray[index].age,     ageDifference: newArray[index].age - row.age,     oldSkill: row.skill,     newSkill: newArray[index].skill,     skillDifference: newArray[index].skill - row.skill   } })}  console.log(generateNewArr())
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript