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

我有一个以下格式的动态 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/


慕侠2389804
浏览 83回答 2
2回答

慕姐4208626

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);

牛魔王的故事

在下面试试这个:            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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript