一次无意接受到json数组去重的帮助需求,自信满满的直接上手,不到两分钟留下代码就转身而去,不等屁股挨上座椅就被告知,无法实现去重效果。。。。立马转身再次回头梳理代码,经过各种梳理与尝试,最终完成了预期效果的实现,也意外的发现中间的一些容易忽略的坑与迷失点,现整理出来给自己梳理知识点的同时也给码友们提供参考。
json数组去重的方法其实很多,最原生的js写法就是for循环遍历,然后剔除重复的对象之后新建一个数组,最后这个新建的数组就是自己需要的,如下实例代码:
function unique(arr)
{
var result = []; //结果数组
for(var i = 0; i < arr.length; i++)
{
//如果在结果数组result中没有找到arr[i],则把arr[i]压入结果数组result中
if (result.indexOf(arr[i]) == -1) result.push(arr[i]);
}
return result;
}
但自从es6语法问世了之后,总会在不经意中或者刻意中去精简自己的代码或者提升代码体验感用es6的语法来处理问题,最开始就直接拿了数组和set的拓展方法来处理去重,语法如下:
// 去除数组的重复成员
[...new Set(array)]
const set = new Set([1, 2, 3, 4, 4]);
[...set]
// [1, 2, 3, 4]
再通过Array.from()转换成数组就以为ok了,结果想当然的就掉坑了。
在es6的官方文档中,所有的示例基本都是用的最简单的数组(可称之为一维数组)