为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法通过比较键值对来动态修改对象

有没有办法通过比较键值对来动态修改对象

慕侠2389804 2022-06-09 16:30:44
我有一个以下格式的动态 JSON 数组,let main_object = [   {      "apple":[         {            "name":"aaaa",            "count":"1",            "filter":{               "type":{                  "name":"test3"               }            }         },         {            "name":"bbbb",            "count":"9",            "filter":{               "type":{                  "name":"test2"               }            }         }      ]   },   {      "orange":[         {            "name":"cccc",            "count":"6",            "filter":{               "type":{                  "name":"test"               }            }         }      ]   }]这里键“名称”是唯一的。更新表单时,我会得到一个如下所示的 json 数组,let updated_data = {       "orange":[          {             "name":"cccc",             "count":"1234",             "type":{                "name":"updated_name"             }          }       ]    }我需要检查“main_object”中json数组中的“name”并删除现有的并用新的“updated_data”更新到“main_object”中。预期输出,let main_object = [   {      "client":[         {            "name":"aaaa",            "count":"1",            "filter":{               "type":{                  "name":"test3"               }            }         },         {            "name":"bbbb",            "count":"9",            "filter":{               "type":{                  "name":"test2"               }            }         }      ]   },   {      "orange":[         {            "name":"cccc",            "count":"1234",            "filter":{               "type":{                  "name":"updated_name"               }            }         }      ]   }]我尝试使用下面的方法,但它的投掷图未定义。不知道我错过了什么。有什么办法可以做到这一点。任何帮助将非常感激。提前致谢。这是小提琴 - https://jsfiddle.net/ynx6oqrp/
查看完整描述

2 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

Map 方法仅适用于数组,因此您需要制作地图level1[rtype],


level1[rtype].map()

然后比较名称使用,


if(item.name === updated_data[rtype][0].name) {

       item = updated_data[rtype];

}

工作片段如下,


let main_object = [

       {

          "apple":[

             {

                "name":"aaaa",

                "count":"1",

                "filter":{

                   "type":{

                      "name":"test3"

                   }

                }

             },

             {

                "name":"bbbb",

                "count":"9",

                "filter":{

                   "type":{

                      "name":"test2"

                   }

                }

             }

          ]

       },

       {

          "orange":[

             {

                "name":"cccc",

                "count":"6",

                "filter":{

                   "type":{

                      "name":"test"

                   }

                }

             }

          ]

       }

    ]

    

    

    

    let updated_data = {

     "orange":[

        {

           "name":"cccc",

           "count":"1234",

           "type":{

              "name":"updated_name"

           }

        }

     ]

  }


let rtype = 'orange';


const altered = 

  main_object.map((level1,i) => {


  if(level1[rtype] !== undefined){

     const data = level1[rtype].map((item,index) => {

     if(item.name === updated_data[rtype][0].name) {

       item = updated_data[rtype];

     }

     return item;

  })

      if(level1[rtype] !== undefined){

      level1[rtype] = data;

    }

  }

    return level1; 

  })


console.log(altered);


查看完整回答
反对 回复 2022-06-09
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

在下面试试这个:


            let rtype = 'orange';

            main_object = main_object.map(function (item) {

                if(Object.keys(item).indexOf(rtype) > -1){

                    item[rtype][0]['filter']['type']['name'] = updated_data[rtype][0]['type']['name'];

                    return item

                }else {

                    return item

                }

            });

            console.log(main_object)


查看完整回答
反对 回复 2022-06-09
  • 2 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信