js中一个数组里面含有多个对象怎么批量把一个对象中的一个属性替换成另外一个对象啊?

这是我从后台拿到的数据list
list:[
{
lastKnowsAnswers:{a:'1',b:'2',c:'3'},
pGoodsAdvice:{a:'1',b:'2',c:'3',
result:"[{"id":"101","name":"货物运输条件鉴定书"},{"id":"102","name":"保函"},{"id":"104","name":"开箱"},{"id":"105","name":"危险品/禁运"}]"}
},
{
lastKnowsAnswers:{a:'1',b:'2',c:'3'},
pGoodsAdvice:{a:'1',b:'2',c:'3',
result:"[{"id":"101","name":"货物运输条件鉴定书"},{"id":"102","name":"保函"},{"id":"104","name":"开箱"},{"id":"105","name":"危险品/禁运"}]"}
}
]
我现在要用 rows : [ {

"id" : "106",
"type" : "1476096570708556",
"name" : "不需要证书",
"status" : "0",
"num" : 1,
"ename" : "Need not cer."

}, {

"id" : "101",
"type" : "1476096570708556",
"name" : "货物运输条件鉴定书",
"remarks" : "描述",
"isLeaf" : "1",
"status" : "0",
"num" : 2,
"ename" : "Need cer."

}, {

"id" : "102",
"type" : "1476096570708556",
"name" : "保函",
"remarks" : "描述",
"isLeaf" : "1",
"status" : "0",
"num" : 3,
"ename" : "guarantee"

}, {

"id" : "104",
"type" : "1476096570708556",
"name" : "开箱",
"remarks" : "描述",
"isLeaf" : "1",
"status" : "0",
"num" : 4,
"ename" : "Package-open"

}, {

"id" : "105",
"type" : "1476096570708556",
"name" : "危险品/禁运",
"remarks" : "描述",
"isLeaf" : "1",
"status" : "0",
"num" : 5,
"ename" : "DGR/Forbidden"

} ]
这个里面rows的数据批量替换掉list里面每列的result里面的值 并且要通过id进行判断就是list里面的id要和rows里面的id相同的时候才替换

阅读 11.3k
2 个回答

没有做太多的判断,需要自己再改一下.
基本似乎是将数组转为key-value对,然后在数组中引用,当然,rows里面的id不能重复,这个是个假设.

        function kvobj(a){
            let res={};
            for(let i=0;i<a.length;i++){
                res[a[i].id]=a[i];
            }
            return res;
        }
        function replaceData(data){
            let obj=kvobj(data.rows);
          let l=data.list;
            for(let i=0;i<l.length;i++){
            console.log(l[i]);
                let rs=l[i].pGoodsAdvice.result;
            for(let j=0;j<rs.length;j++){
                if(obj[rs[j].id]){
              rs[j]=obj[rs[j].id];
              }
          }
        }
        }
        let demoData={list:[
        {
        lastKnowsAnswers:{a:'1',b:'2',c:'3'},
        pGoodsAdvice:{a:'1',b:'2',c:'3',
        result:[{"id":"101","name":"货物运输条件鉴定书"},{"id":"102","name":"保函"},{"id":"104","name":"开箱"},{"id":"105","name":"危险品/禁运"}]}
        },
        {
        lastKnowsAnswers:{a:'1',b:'2',c:'3'},
        pGoodsAdvice:{a:'1',b:'2',c:'3',
        result:[{"id":"101","name":"货物运输条件鉴定书"},{"id":"102","name":"保函"},{"id":"104","name":"开箱"},{"id":"105","name":"危险品/禁运"}]}
        }
        ],
        rows : [ {
        "id" : "106",
        "type" : "1476096570708556",
        "name" : "不需要证书",
        "status" : "0",
        "num" : 1,
        "ename" : "Need not cer."
        }, {
        "id" : "101",
        "type" : "1476096570708556",
        "name" : "货物运输条件鉴定书",
        "remarks" : "描述",
        "isLeaf" : "1",
        "status" : "0",
        "num" : 2,
        "ename" : "Need cer."
        }, {
        
        "id" : "102",
        "type" : "1476096570708556",
        "name" : "保函",
        "remarks" : "描述",
        "isLeaf" : "1",
        "status" : "0",
        "num" : 3,
        "ename" : "guarantee"
        }, {
        "id" : "104",
        "type" : "1476096570708556",
        "name" : "开箱",
        "remarks" : "描述",
        "isLeaf" : "1",
        "status" : "0",
        "num" : 4,
        "ename" : "Package-open"
        }, {
        "id" : "105",
        "type" : "1476096570708556",
        "name" : "危险品/禁运",
        "remarks" : "描述",
        "isLeaf" : "1",
        "status" : "0",
        "num" : 5,
        "ename" : "DGR/Forbidden"
        } ]};
        replaceData(demoData);
        console.log(demoData)

let list = [

    {
        lastKnowsAnswers:{a:'1',b:'2',c:'3'},
        pGoodsAdvice:{
            a:'1',
            b:'2',
            c:'3', 
            result:'[{"id":"151","name":"货物运输条件鉴定书"},{"id":"101","name":"货物运输条件鉴定书"}, {"id":"102","name":"保函"},{"id":"104","name":"开箱"},{"id":"105","name":"危险品/禁运"}]'
        }
    },
    {
        lastKnowsAnswers:{a:'1',b:'2',c:'3'},
        pGoodsAdvice:{
            a:'1',
            b:'2',
            c:'3', 
            result:'[{"id":"101","name":"货物运输条件鉴定书"},{"id":"102","name":"保函"},{"id":"104","name":"开箱"},{"id":"105","name":"危险品/禁运"}]'
        }
    }
]

let arr =  [ {
    "id" : "106",
    "type" : "1476096570708556",
    "name" : "不需要证书",
    "status" : "0",
    "num" : 1,
    "ename" : "Need not cer."
    }, {

    "id" : "101",
    "type" : "1476096570708556",
    "name" : "货物运输条件鉴定书",
    "remarks" : "描述",
    "isLeaf" : "1",
    "status" : "0",
    "num" : 2,
    "ename" : "Need cer."
    }, {

    "id" : "102",
    "type" : "1476096570708556",
    "name" : "保函",
    "remarks" : "描述",
    "isLeaf" : "1",
    "status" : "0",
    "num" : 3,
    "ename" : "guarantee"
    }, {

    "id" : "104",
    "type" : "1476096570708556",
    "name" : "开箱",
    "remarks" : "描述",
    "isLeaf" : "1",
    "status" : "0",
    "num" : 4,
    "ename" : "Package-open"
    }, {

    "id" : "105",
    "type" : "1476096570708556",
    "name" : "危险品/禁运",
    "remarks" : "描述",
    "isLeaf" : "1",
    "status" : "0",
    "num" : 5,
    "ename" : "DGR/Forbidden"
    } ]

 function replaceData (list,arr){
   //先将result转成json对象
    list.map((x,i)=>{
        x.pGoodsAdvice.result = JSON.parse(x.pGoodsAdvice.result)
    })
    list.map((x,i)=>{
        x.pGoodsAdvice.result.map((t,i)=>{
            arr.map((s)=>{
                if(t.id == s.id){
                    x.pGoodsAdvice.result[i] = s
                }
            })
            
        })
    })
    return list
}

 console.log('list',replaceData(list, arr))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题