我需要对下面的程序做一些澄清。 " t"参数影响程序

时间:2016-03-16 15:34:27

标签: javascript function arguments

代码有效,我只是不知道" 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]);




1 个答案:

答案 0 :(得分:0)

Array filter()方法创建一个新数组,其中所有元素都通过其参数中提供的函数实现的测试。

在您的情况下,您将checkit方法提供给filter,其中newArr遍历t。对于每次迭代newArrt中的值,您基本上检查arr1arr2中是否存在4。如果其中任何一个没有该元素,则返回该元素。

此处var newArr = arr1.concat(arr2);是值。

为了更清楚,我会将其分解为步骤:

  1. newArr 在concat [1, 2, 3, 5, 1, 2, 3, 4, 5]成为newArr.filter()之后,

  2. 在下一步调用filter()方法。 根据{{​​1}}文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter filter()方法根据提供的回调过滤掉调用数组中传递所需测试的元素。这里的回调或方法是checkit()

  3. checkit()方法中,t代表newArr中元素的值。因此,在if条件下,您要检查tarr1中是否存在arr2

  4. 我们以newArr的第一个元素为例。现在newArr中的第一个元素是1. arr1.indexOf(1)会给你零,因为元素1出现在arr1的第零个位置。 arr2也是如此。现在arr1.indexOf(1) === -1会给你假,而arr2.indexOf(1) === -1也会给你假。

  5. 它将继续这样,直到你达到值4即。 newArr中的第二个最后一个元素。当您执行arr1.indexOf(4)时,由于arr1中不存在元素4,因此您将得到-1。所以arr1.indexOf(1) === -1会给你真实的。 if条件将成立,并返回当前元素t,即4。

  6. 接下来,如果两个数组中都存在5,则不满足if条件。因此,你的数组中只剩下4个。