我正在使用以下格式的动态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数组中的“名称”,并删除现有的名称,并使用新的“ 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/
let rtype = 'orange';
const altered =
main_object.map((level1,i) => {
const data = main_object[0].rtype.map((item,index) => {
if(item.name === updated_data[0].rtype[0].name){
item = updated_data[0].rtype[0];
}
return item;
})
if(level1.rtype){
level1.rtype = data;
}
return level1;
})
console.log(altered);
答案 0 :(得分:1)
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);