这个功能如何工作,

时间:2017-02-22 16:30:14

标签: javascript algorithm function ecmascript-5

这是代码

var diffArray = function(a, b) {
    return b.filter(function(value) { return a.indexOf(value) === -1; });
};

输入是:

diffArray([1, "3", 3, "4"], [1, "1", 3, 4]);

我不明白为什么它会返回:["1", 4]

请你澄清一下。

1 个答案:

答案 0 :(得分:0)

解释一些事情:

Array.indexOf方法是一种在数组中搜索特定元素的方法,如果找到该元素则返回该元素的索引。如果没有,则返回-1。

Array.filter接收回调函数。对于数组的每个元素,这个回调函数被调用一次,如果元素应该出现在过滤结果中,它应该返回true,如果它不应该出现,则返回false。 示例:[1, 2, 3].filter(function(value) { return value < 3 });将返回[1, 2]

所以你将2个数组传递给diffArray。正在过滤b数组,过滤器函数在数组中搜索b数组的每个元素,并返回数组中不存在的b数组的每个元素(每个元素都有indexOf === -1);

所以b元素是[1, "1", 3, 4]。让我们一步一步地看一下:

  • 1存在于a中,因此我们不会返回,因为我们正在寻找
  • 中不存在的元素
  • &#34; 1&#34;它不存在,所以它返回了。一个数组有1个元素,但这是一个不同类型的&#34; 1&#39;
  • 3出现是因为它没有被退回
  • 4不存在于返回中。同样不同类型的情况如&#34; 1&#34;。

我希望现在更清楚。