【问题标题】:How to replace the particular value in array object of nested object with another array object in javascript如何用javascript中的另一个数组对象替换嵌套对象的数组对象中的特定值
【发布时间】:2020-10-19 02:36:00
【问题描述】:

我有两个对象obj1obj2,如果obj1 属性info 有键idcode

如果obj1code and id的数组对象infoobj2匹配,则将obj2的nos替换为obj1。如果不匹配,将其更改为0

如果 id 和 code 与 javscript 中的另一个数组对象匹配,如何替换嵌套数组对象的数组对象中的值。

function newArray (obj1,obj2){
 return obj2.map(e=>{
   nos = obj1.filter(i=>i.info.some(x=>x.id === e.id && x.code === i.code)
   return nos ? {...e, nos} : e;
 })
}

var obj1 =[
 {tot: 4, info: [{id:1, code:"x1",nos:2},{id:2, code:"x2",nos:2}] }
 {tot: 2, info: [{id:3, code:"x3",nos:2},{id:5, code:"x5",nos:3}}]}
]

var obj2 = [
 {id:1, code: "x1", nos:1, name:"sample1"},
 {id:2, code: "x2", nos:2, name:"sample2"},
 {id:3, code:"x3",nos:3, name:"sample3"},
 {id:4, code: "x1", nos:0},
 {id:5, code: "x5", nos:3, name:"sample5"},
]

预期输出:

[
{id:1, code: "x1", nos:2, name:"sample1"},
{id:2, code: "x2", nos:2, name:"sample2"},
{id:3, code:"x3",nos:2, name:"sample3"},
{id:4, code: "x1", nos:0},
{id:5, code:"x5",nos:3, name"sample5"}
]

【问题讨论】:

    标签: javascript arrays object nested-object


    【解决方案1】:

    首先将 obj1 中的所有内容提取到一个数组中,这样剩下的事情就更容易了:

    function newArray (obj1, obj2) {
      // Extract every item from obj1 into an Array, to make the next step easier
      const arr1 = obj1.reduce((res, group) => [ ...res, ...group.info], []);
     
      return obj2.map(e => {
        const match = arr1.find(x => x.id === e.id && x.code === e.code);
        return { ...e, nos: match ? match.nos : 0 };
      });
    }
    
    var obj1 =[
     { tot: 4, info: [{ id:1, code:"x1", nos:2 },{ id:2, code:"x2",nos:2 }] },
     { tot: 2, info: [{ id:3, code:"x3", nos:2 },{ id:5, code:"x5",nos:3 }] }
    ];
    
    var obj2 = [
     { id:1, code: "x1", nos:1, name: "sample1" },
     { id:2, code: "x2", nos:2, name: "sample2" },
     { id:3, code:"x3", nos:3, name: "sample3" },
     { id:4, code: "x1", nos: 0 },
     { id:5, code: "x5", nos: 3, name: "sample5" }
    ];
    
    const res = newArray(obj1, obj2);
    
    console.log( JSON.stringify(res).replace(/\},\{/g, '},\n{') );
    /*
    [{"id":1,"code":"x1","nos":2,"name":"sample1"},
    {"id":2,"code":"x2","nos":2,"name":"sample2"},
    {"id":3,"code":"x3","nos":2,"name":"sample3"},
    {"id":4,"code":"x1","nos":0},
    {"id":5,"code":"x5","nos":3,"name":"sample5"}]
    */

    【讨论】:

      猜你喜欢
      • 2015-03-31
      • 1970-01-01
      • 2022-08-18
      • 2022-10-23
      • 2021-12-20
      • 2019-04-26
      • 2021-03-28
      • 2021-11-17
      • 1970-01-01
      相关资源
      最近更新 更多