繁体   English   中英

相同的for循环似乎不起作用

[英]Identical for loop doesn't seem to be working

我正在尝试解决Free Code Camp的编码挑战。

区分两个数组

比较两个数组,并返回一个新的数组,其中包含仅在两个给定数组之一中找到的所有项,但不能同时在两个数组中返回。 换句话说,返回两个数组的对称差。

[1、2、3、5],[1、2、3、4、5]应该返回[4]。

[1,“小牛”,3,“小猪”],[1,“小牛”,3,4]应该返回[“小猪”,4]。

我的代码如下:

 function diffArray(arr1, arr2) {
        var arr1Key = [];
        arr1Key = arr1;

        for (i = arr1.length - 1; i >= 0; i--) {
            for (j = 0; j < arr2.length; j++) {
                if (arr1[i] === arr2 [j]) {
                    arr1.splice(i, 1);
                }
            }
        }

        for (k = arr2.length - 1; k >= 0; k--) {
            for (l = 0; l < arr1Key.length; l++) {
                if (arr2[k] === arr1Key[l]) {
                    arr2.splice(k, 1);
                }
            }
        }

        var newArr = [];
        newArr = arr1.concat(arr2);
        return (newArr)
    }

    diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]);

我知道它可能不是完美的/最优的,但是我主要想知道的是为什么我的第一个for循环系列(使用i&j)可以完美地工作。 同时,我的下一个for循环系列(使用k&l)几乎是第一个for循环的副本,但是经过一些测试,我发现只有k for循环有效。 l for循环不起作用,我不明白为什么。

我一直在注视着这个东西,并为永远的感觉修补它,而我只是不明白。

您在循环遍历数组时对其进行了拼接,但拼接可能会使它们增大或缩小,并且您不希望这样做,因为您正在使用数组的length进行循环。

问题是,你觉得你克隆arr1arr1Key = arr1;

这不会克隆,但会创建对arr1的引用,因此arr1.splice(i, 1); 也更改arr1Key

只需更改行arr1Key = arr1; 进入arr1Key = arr1.slice();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM