Javascript 使用JS从动态多级嵌套对象中删除重复项

Javascript 使用JS从动态多级嵌套对象中删除重复项,javascript,nested-object,Javascript,Nested Object,我在其中嵌套了json对象,我需要删除具有重复键的对象。 例如:在给定的数组中,我需要根据“value”键从edit、new和delete中删除重复项。我尝试了多种方法,但无法动态执行 let json = { edit:{ params:[], items:[ { id:"1", source:"text", value:"new1&quo

我在其中嵌套了json对象,我需要删除具有重复键的对象。 例如:在给定的数组中,我需要根据“value”键从edit、new和delete中删除重复项。我尝试了多种方法,但无法动态执行

let json = {
  edit:{
     params:[],
     items:[
        {
           id:"1",
           source:"text",
           value:"new1"
        },
     ]
  },
  delete:{
     params:[],
     items:[
        {
           id:"2",
           source:"text",
           value:"new2"
        },
     ]
  },
  new:{
     params:[],
     items:[
        {
           id:"3",
           source:"text",
           value:"new1"
        },
        {
           id:"4",
           source:"text",
           value:"new"
        },
        {
           id:"5",
           source:"text",
           value:"new2"
        },
        {
           id:"6",
           source:"text",
           value:"new"
        },
     ]
  },
  text:{
     name:"test",
     value:"test",
     id:"10"
  }
}
预期产出应为:

let result = {
  edit:{
     params:[],
     items:[
        {
           id:"1",
           source:"text",
           value:"new1"
        }
     ]
  },
  delete:{
     params:[],
     items:[
        {
           id:"2",
           source:"text",
           value:"new2"
        }
     ]
  },
  new:{
     params:[],
     items:[
        {
           id:"4",
           source:"text",
           value:"new"
        }
     ]
  },
  text:{
     name:"test",
     value:"test",
     id:"10"
  }
}


一种简单的方法是让数组在遍历项时保存所有解析的值,并根据它们在该数组中的包含情况过滤项:

//创建空值数组以用于检查重复项
常量值=[];
//创建空结果对象
const result={};
//循环浏览json中的edit、delete、new和text键
Object.keys(json).forEach(key=>{
const obj=json[key];
//循环浏览项目并过滤掉不重复项
常量items=obj.items.filter(item=>!values.includes(item.value));
//将项目值存储在重复检查数组中
items.forEach(item=>values.push(item.value));
//将键添加到结果中
结果[键]={
…obj,//分散原始obj中的所有值
items,//覆盖这些项
};
});