代码有效,我只是不知道" t" value成为第二个数组中的数字4。任何帮助将不胜感激。
function diff(arr1, arr2) {
var newArr = arr1.concat(arr2);
function checkit(t) {
if (arr1.indexOf(t) === -1 || arr2.indexOf(t) === -1) {
return t;
}
}
return newArr.filter(checkit);
}
diff([1, 2, 3, 5], [1, 2, 3, 4, 5]);

答案 0 :(得分:0)
Array filter()方法创建一个新数组,其中所有元素都通过其参数中提供的函数实现的测试。
在您的情况下,您将checkit
方法提供给filter
,其中newArr
遍历t
。对于每次迭代newArr
是t
中的值,您基本上检查arr1
和arr2
中是否存在4
。如果其中任何一个没有该元素,则返回该元素。
此处var newArr = arr1.concat(arr2);
是值。
为了更清楚,我会将其分解为步骤:
newArr
在concat [1, 2, 3, 5, 1, 2, 3, 4, 5]
成为newArr.filter()
之后,
在下一步调用filter()
方法。
根据{{1}}文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter filter()
方法根据提供的回调过滤掉调用数组中传递所需测试的元素。这里的回调或方法是checkit()
。
在checkit()
方法中,t
代表newArr
中元素的值。因此,在if
条件下,您要检查t
和arr1
中是否存在arr2
。
我们以newArr
的第一个元素为例。现在newArr
中的第一个元素是1. arr1.indexOf(1)
会给你零,因为元素1出现在arr1
的第零个位置。 arr2
也是如此。现在arr1.indexOf(1) === -1
会给你假,而arr2.indexOf(1) === -1
也会给你假。
它将继续这样,直到你达到值4即。 newArr
中的第二个最后一个元素。当您执行arr1.indexOf(4)
时,由于arr1
中不存在元素4,因此您将得到-1。所以arr1.indexOf(1) === -1
会给你真实的。 if
条件将成立,并返回当前元素t
,即4。
接下来,如果两个数组中都存在5,则不满足if条件。因此,你的数组中只剩下4个。