Javascript 将多级JSON简化为唯一记录数组

Javascript 将多级JSON简化为唯一记录数组,javascript,json,multidimensional-array,Javascript,Json,Multidimensional Array,我试图将多级JSON简化为一个唯一记录数组 这是JSON的一个示例: {“id”:{“v”:“982W:811”,“f”:“811”},“父项”:“982W”,“大小”:null} 我发现的每个示例都演示了如何减少字符串/数字的简单数组或单个级别的JSON对象 下面是我的工作代码,它通过3个步骤找到唯一的记录并以所需的JSON格式输出 有没有更好的办法 感谢您的帮助和理解 //包含重复项的数组 变量数组=[ {“id”:{“v”:“982W:811”,“f”:“811”},“父项”:“982W

我试图将多级JSON简化为一个唯一记录数组

这是JSON的一个示例:

{“id”:{“v”:“982W:811”,“f”:“811”},“父项”:“982W”,“大小”:null}

我发现的每个示例都演示了如何减少字符串/数字的简单数组或单个级别的JSON对象

下面是我的工作代码,它通过3个步骤找到唯一的记录并以所需的JSON格式输出

有没有更好的办法

感谢您的帮助和理解

//包含重复项的数组
变量数组=[
{“id”:{“v”:“982W:811”,“f”:“811”},“父项”:“982W”,“大小”:null},
{“id”:{“v”:“982W:811”,“f”:“811”},“父项”:“982W”,“大小”:null},//重复
{“id”:{“v”:“982W:813”,“f”:“813”},“父项”:“982W”,“大小”:null},
{“id”:{“v”:“982W:813”,“f”:“813”},父项”:“982W”,“size:null},//重复
{“id”:{“v”:“982W:831”,“f”:“831”},“父项”:“982W”,“大小”:null},
{“id”:{“v”:“982W:831”,“f”:“831”},“父项”:“982W”,“大小”:null}//重复
];
//log('array',array);
//字符串化数组
变量数组_stringify=[];
对于(var i=0;i*/
您可以创建一个自定义函数来比较嵌套对象

  • 创建一个包含两个对象的函数
  • 遍历对象的键。检查两个对象的同一键是否不相同,然后返回
    false
  • 检查值是否为其他对象,然后对这两个值递归调用函数
  • 如果没有找到不相等的对应键,则返回
    true
  • 然后结合使用
    filter()
    some()
    删除重复项
const isObj=a=>a&&typeof a==“对象”
功能比较(obj1、obj2){
if(Object.keys(obj1).length!==Object.keys(obj2.length)返回false;
用于(让k进入obj1){
如果([obj1[k],obj2[k]].every(isObj)){
如果(!compare(obj1[k],obj2[k])返回false;
}
否则{
如果(obj1[k]!==obj2[k])返回false;
}
}
返回true;
}
变量数组=[
{“id”:{“v”:“982W:811”,“f”:“811”},“父项”:“982W”,“大小”:null},
{“id”:{“v”:“982W:811”,“f”:“811”},“父项”:“982W”,“大小”:null},//重复
{“id”:{“v”:“982W:813”,“f”:“813”},“父项”:“982W”,“大小”:null},
{“id”:{“v”:“982W:813”,“f”:“813”},父项”:“982W”,“size:null},//重复
{“id”:{“v”:“982W:831”,“f”:“831”},“父项”:“982W”,“大小”:null},
{“id”:{“v”:“982W:831”,“f”:“831”},“父项”:“982W”,“大小”:null}//重复
];
设res=array.filter((x,i)=>array.slice(i+1).every(a=>!compare(x,a)))

console.log(res)
使用stringify方法,您可以通过使用数组的一个循环并在执行时添加到set来减少步骤,在添加之前检查该项是否已经存在

但是,如果任何属性与数组中的其他元素顺序不同,并且通常不推荐使用
JSON.stringify()
,则使用
JSON.stringify()将不起作用。使用“深度相等”递归函数要安全得多

var数组=[
{“id”:{“v”:“982W:811”,“f”:“811”},“父项”:“982W”,“大小”:null},
{“id”:{“v”:“982W:811”,“f”:“811”},“父项”:“982W”,“大小”:null},//重复
{“id”:{“v”:“982W:813”,“f”:“813”},“父项”:“982W”,“大小”:null},
{“id”:{“v”:“982W:813”,“f”:“813”},父项”:“982W”,“size:null},//重复
{“id”:{“v”:“982W:831”,“f”:“831”},“父项”:“982W”,“大小”:null},
{“id”:{“v”:“982W:831”,“f”:“831”},“父项”:“982W”,“大小”:null}//重复
];
变量集=新集()
var res=array.reduce((a,c)=>{
var str=JSON.stringify(c)
如果(!set.has(str)){
set.add(str)
返回a.concat(c);
}   
归还
},[])

log(res)
我已经成功地使用这个JavaScript进程进行了测试。感谢您分享关于lodash.js的提示。作为前端开发人员,它看起来像一个方便的库。