Javascript 有没有办法用基于键的新对象替换JSON数组中的现有对象

Javascript 有没有办法用基于键的新对象替换JSON数组中的现有对象,javascript,json,Javascript,Json,我有一个动态JSON数组,格式如下 let main_data = [ { "client":[ { "name":"aaaa", "count":"1", "filter":{ "type":{ "name":"test3" } } },

我有一个动态JSON数组,格式如下

let main_data = [
   {
      "client":[
         {
            "name":"aaaa",
            "count":"1",
            "filter":{
               "type":{
                  "name":"test3"
               }
            }
         },
         {
            "name":"bbbb",
            "count":"9",
            "filter":{
               "type":{
                  "name":"test2"
               }
            }
         }
      ]
   },
   {
      "compute":[
         {
            "name":"cccc",
            "count":"6",
            "filter":{
               "type":{
                  "name":"test"
               }
            }
         }
      ]
   }
]
这里的键“name”是唯一的。更新表单时,我会得到一个json数组,如下所示

let new_data = [
   {
      "client":[
         {
            "name":"bbbb",
            "count":"1234",
               "type":{
                  "name":"updated_name"
               }
            }
         }
      ]
   }
]
我需要在“main_data”中检查json数组中的“name”,并删除现有的名称,然后用新的“updated_data”更新到“main_data”中。(请不要用Jquery)

预期产量

let main_data = [
   {
      "client":[
         {
            "name":"aaaa",
            "count":"1",
            "filter":{
               "type":{
                  "name":"test3"
               }
            }
         },
         {
            "name":"bbbb",
            "count":"123",
            "filter":{
               "type":{
                  "name":"updated_name"
               }
            }
         }
      ]
   },
   {
      "compute":[
         {
            "name":"cccc",
            "count":"6",
            "filter":{
               "type":{
                  "name":"test"
               }
            }
         }
      ]
   }
]

有没有办法做到这一点。任何帮助都将不胜感激。提前感谢。

这里有一个简单的方法,假设您的新数据位于variable
newData

main_data.client.filter(item => item.name === newData.name).push(newData)
试试这个

让主数据=[{
客户:[{
名称:“aaaa”,
计数:“1”,
过滤器:{
类型:{
名称:“test3”
}
}
},
{
名称:“bbbb”,
计数:“9”,
过滤器:{
类型:{
名称:“test2”
}
}
}
]
},
{
计算:[{
名称:“中交”,
计数:“6”,
过滤器:{
类型:{
名称:“测试”
}
}
}]
}
];
让新的_数据=[{
客户:[{
名称:“bbbb”,
计数:“1234”,
过滤器:{
类型:{
名称:“更新的名称”
}
}
}]
}];
const res=main_data.map((项目、索引)=>{
如果(项目.客户){
const clients=item.client.map(客户端=>{
if(client.name==新的_数据[0]。客户端[0]。名称){
客户端=新的_数据[0]。客户端[0];
}
返回客户;
});
返回{
客户:客户
};
}
退货项目;
});

控制台日志(res)很可能有一种奇特的方法来完成这项工作,但人们总是可以找到匹配的项目并替换它。例如

让主数据=[
{
“客户”:[
{
“名称”:“aaaa”,
“计数”:“1”,
“过滤器”:{
“类型”:{
“名称”:“test3”
}
}
},
{
“名称”:“bbbb”,
“计数”:“123”,
“过滤器”:{
“类型”:{
“名称”:“更新的名称”
}
}
}
]
},
{
“计算”:[
{
“名称”:“中交”,
“计数”:“6”,
“过滤器”:{
“类型”:{
“名称”:“测试”
}
}
}
]
}
];
让新的_数据=[
{
“客户”:[
{
“名称”:“bbbb”,
“计数”:“1234”,
“类型”:{
“名称”:“更新的名称”
}
}
]
}
];
log(“before:+JSON.stringify(main_data));
newItem=new_数据[0][“客户端”][0];
mainDataList=main_数据[0][“客户端”];
对于(i=0;ilog(“之后:+JSON.stringify(main_数据))嘿,你试过什么?没有“JSON数组”,你有一个数组文字。@kalaiyarasiM,希望这是你最终的预期输出。。查看控制台以获取所需的数据。。另外,这里的分叉小提琴@ManirajMuruganAs是动态的需要,我添加了变量名,但它不起作用。投掷错误。试图解决,但不起作用。这是我的Fiddle@kalaiyarasiM,也在另一个问题中发布了答案,如果它解决了您的团队问题,请接受它。我尝试了相同的方法,但它不起作用。这是您的小提琴,@kalaiyarasiM因为主_数据是一个对象数组,您应该首先指定索引,然后使用点运算符选择对象成员,将
main_数据更改为
main_数据[0].client
它将起作用。@kalaiyarasiM–不要将代码发布到其他地方,并从注释链接到答案。把它放在问题中。对不起,当我添加变量名而不是直接调用它时,它不起作用。对不起,不起作用。不知道我错过了什么。请检查我的小提琴。