[英]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
进行循环。
问题是,你觉得你克隆arr1
写arr1Key = arr1;
这不会克隆,但会创建对arr1
的引用,因此arr1.splice(i, 1);
也更改arr1Key
。
只需更改行arr1Key = arr1;
进入arr1Key = arr1.slice();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.