JavaScript中移除嵌套数组重复元素的最优方法是什么?
嵌套数组去重解决方案
方法1:JSON序列化 + Set
利用JSON.stringify将子数组转为字符串(解决引用类型无法直接比较的问题),通过Set的唯一性去重后,再转回数组:
let array = [ [402457.9590403921, 4621707.254796494], [402457.9590403921, 4621707.254796494], [402457.9590403921, 4621707.254796494], [402442.9590403921, 462145.254796494], [402442.9590403921, 462145.254796494], ]; const uniqueArray = Array.from(new Set(array.map(item => JSON.stringify(item)))).map(str => JSON.parse(str)); console.log(uniqueArray);
方法2:Reduce + Map(高效遍历)
遍历数组时用Map记录已处理过的子数组,避免重复添加:
let array = [ [402457.9590403921, 4621707.254796494], [402457.9590403921, 4621707.254796494], [402457.9590403921, 4621707.254796494], [402442.9590403921, 462145.254796494], [402442.9590403921, 462145.254796494], ]; const map = new Map(); const uniqueArray = array.reduce((acc, item) => { const key = JSON.stringify(item); if (!map.has(key)) { map.set(key, true); acc.push(item); } return acc; }, []); console.log(uniqueArray);
注意事项
上述方法基于JSON.stringify实现子数组的唯一性判断,仅适用于子数组元素为可序列化类型(如数字、字符串、普通对象等)的场景。如果子数组包含函数、Symbol等不可序列化类型,需要自定义比较逻辑。
内容的提问来源于stack exchange,提问作者VFG
相关产品推荐
相关产品推荐

