亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

基于另外兩個對象數組創建對象數組

基于另外兩個對象數組創建對象數組

慕標琳琳 2023-06-15 15:45:20
我有兩個對象數組,我想基于它們創建第三個對象并添加一些新的鍵/值?;A數據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));
查看完整描述

2 回答

?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

如果對象的順序相同,那么您可以試試這個。否則我們需要根據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);


查看完整回答
反對 回復 2023-06-15
?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

好吧,解決方案比我預期的要容易......(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())


查看完整回答
反對 回復 2023-06-15
  • 2 回答
  • 0 關注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號