<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>去除二维数组中重复的一维数组</title>
</head>
<body>
<div id="app">
</div>
</body>
<script>
var arr = [
[1, 2, "haha"],
[1, 3, "haha"],
[2, 2, "haha"],
[1, 2, "abcd"],
[1, 2, "haha"],
[1, 2, "haha"],
[1, 2, "haha"],
[1, 2],
[1, 3],
[3, 2],
["I", "and", "you"],
["I", "and", "you"],
["I", "and", "you"],
["i", "and"],
["i", "and"],
["I", "and", "you", "others"],
["I", "and", "you", "others"]
];//用于测试的复杂数组
var temp;//储存二维数组中的元素
var count;//两个下标不同,长度相同的元素中相应位置上元素相同的次数
for (let i = 0; i < arr.length; i++) {//第一次遍历数组,确保数组的子数组都被检测
temp = arr[i];//存储被检测的当前子数组
console.log("for1,arr[" + i + "]:" + arr[i]);
for (let k = 0; k < arr.length; k++) {
if (k != i && arr[k].length == temp.length) {//第二次遍历数组,检测除了被检测数组本身以及两者长度一样的子数组
count = 0;//初始化
for (let 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);//查看效果
</script>
</html>
主要思路:
for1: 存入要比较的元素其中一个 =》for2: 取出另一个要比较的元素 =》if1:判断二个元素不是同一下标且长度相同 =》for3: 依次比对二个元素内部的元素并(if2)记录相同的次数 =》if3: 如果次数等于二个元素的长度则两个元素是相同的数组=》splice()删除第二个用来比较的元素 =》arr数组长度变化,“k–;"使循环仍然在此下标位置开始进行。=》循环全部完成,二维数组中相同元素只保留一个。