JS二维数组去重

       在网上找了很多的JS二维数组去重的方法,基本上都有Bug,不是去除不完全就是只能根据特定的条件去除,或者去除了非重复元素。项目中需要解决这个问题,所以自己写了一个方法,方便自己也方便他人,本人已测试过很多数据,修复了很多Bug,如果网友发现了Bug,恳请提出,本人再改进。代码如下:

var arr = [
[1, 2, 'haha'],
[1, 3, 'haha'],
[2, 2, 'haha'],
[1, 2, 'xixi'],
[1, 2, 'haha'],
[1, 3, 'haha'],
[1, 3, 'haha'],
[1, 3, 'haha'],
[1, 3],
[1, 2],
[1, 3],
['he','xi','ze'],
['he','xi','ze'],
['he','xi','zi'],
['he','xi'],
['he','xi'],
['he','xi','ze','zi']
]; // 用于测试的复杂数组
var temp;
var count;
for (var i = 0; i < arr.length; i++) { // 第一次遍历数组,确保数组里的子数组都能被检测
temp = arr[i]; // 存储被检测的当前子数组
for (var k = 0; k < arr.length; k++) {
if (k != i && arr[k].length == temp.length) { // 第二次遍历数组,检测除了被检测数组本身以及两者长度不一样的子数组
count = 0; // 初始化
for (var j = 0; j < arr[k].length; j++) { // 遍历检测的子数组
if (arr[k][j] == temp[j]) {
count++; // 记录检测子数组与被检测子数组中的元素重复次数
}
}
if (count == temp.length) { // 如果次数与被检测子数组的长度相等,代表两者重复
arr.splice(k,1); // 删除该重复元素
k--; // 数组长度变化,K需要减一回到当前位置
}
}
}
}
console.log(arr); // 查看效果


       用到了for循环嵌套,从性能上来说有一点不美好,但是如果要到达效果,只能这么做了。如果有朋友能有改进的方法,也欢迎提出。

阅读更多

没有更多推荐了,返回首页