使用 javascript 更新对象值

我想知道如何使用 javascript 更新对象列表数组。


如何更新objList与newObjList通过匹配id和name。如果id和name匹配,则更新objList嵌套数组对象。


var result = updateObj(objList, newObjList);

console.log(result);


function updateObj(list, newObjList){

  var flatarr = list.map(e=>Object.entries(e).map(([k, val]) => val)).flat(3);

  var filterService =  newObjList.filter(e=>e.name=="service");

  //got stuck

}


var newObjList=[{

    "id": "service",

    "name": "bank",

    "amount": 2000

},{

    "id": "service",

    "name": "credit",

    "amount": 5000

}]



var objList=[

{

  "btob": [{

    "id": "service",

    "name": "bank",

    "amount": 1000

  },{

    "id": "fund",

    "name": "bank",

    "amount": 2000

  },{

    "id": "others",

    "name": "bank",

    "amount": 5000

   }]

},{

 "ctob":[{

    "id": "service",

    "name": "credit",

    "amount": 1000,

    "rate": 0.4

  },{

    "id": "fund",

    "name": "credit",

    "amount": 3000,

    "rate": 0.2

  },{

    "id": "others",

    "name": "credit",

    "amount": 4000,

    "rate": 0.6

   }]

  }]

}]

喵喵时光机
浏览 434回答 3
3回答

智慧大石

如果您想要一个完全不依赖于硬编码的解决方案 - 即没有"btob"或"ctob",您可以使用 a.map()来循环objList。对于其中的每个项目,循环遍历它的所有键/值对,并使用.find(). 这也使您的原始对象保持原样,而不是覆盖它。考虑下面的示例,其中我添加了一个额外的键来演示可扩展性。var newObj = [  { "id": "service", "name": "bank", "amount": 2000 },  { "id": "service", "name": "credit", "amount": 5000 },  { "id": "test", "name": "test", "newKey": "Hello world!"}]; var objList = [  { "btob": [{ "id": "service", "name": "bank", "amount": 1000 },{ "id": "fund", "name": "bank", "amount": 2000 },{ "id": "others", "name": "bank", "amount": 5000 }] },  { "ctob":[{ "id": "service", "name": "credit", "amount": 1000, "rate": 0.4 },{ "id": "fund", "name": "credit", "amount": 3000, "rate": 0.2 },{ "id": "others", "name": "credit", "amount": 4000, "rate": 0.6 }]},   { "dtob": [{ "id": "test", "name": "test"}]}];let result = objList  .map(root => Object.keys(root)    .reduce((output,key) => (      {...output, [key]: root[key]        .flatMap(i => {          let replacement = newObj.find(f => i.id === f.id && i.name === f.name);          return replacement ? {...i, ...replacement} : i;        })      }    ), {})  );console.log(result);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript