在网上找了很多的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循环嵌套,从性能上来说有一点不美好,但是如果要到达效果,只能这么做了。如果有朋友能有改进的方法,也欢迎提出。