原生JS去除二维数组中重复了的一维数组

<!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–;"使循环仍然在此下标位置开始进行。=》循环全部完成,二维数组中相同元素只保留一个。

@沉木

你可能感兴趣的:(js,算法)