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

猜你喜欢

转载自blog.csdn.net/mo_zifeng/article/details/80340519