数组与查找和包含混淆

时间:2017-06-02 12:04:35

标签: javascript arrays ecmascript-6

给出以下数组:

const x = [2, 14, 54, 109, 129, 136, 165, 312, 320, 330, 335, 348, 399, 440, 450, 461, 482, 501, 546, 547, 549, 559, 582, 584, 615, 620, 647, 682];
const y = [539, 681, 682, 683];

使用node v 7.3.0我观察到以下意外行为:

[> x.find(y.includes, y);
undefined
[> y.find(x.includes, x);
682

示例代码段:

const x = [2, 14, 54, 109, 129, 136, 165, 312, 320, 330, 335, 348, 399, 440, 450, 461, 482, 501, 546, 547, 549, 559, 582, 584, 615, 620, 647, 682];
const y = [539, 681, 682, 683];

console.log(x.find(y.includes, y))
console.log(y.find(x.includes, x))

x.find(element => y.includes(element));之类的代码总是按预期找到该元素。

我不明白为什么只使用findincludes的两个电话会产生不同的结果,如果有人知道解释会很高兴。

1 个答案:

答案 0 :(得分:5)

x.find(y.includes, y);返回undefined的原因是因为在函数中传递了参数。

Array.find的回调预计会有3个值,item, index, arrayArray.includes的回调需要2个参数,即item, fromIndex

基本上,您当前的索引将在fromIndex中被视为Array.includes,并会跳过之前的元素。

因此,在四次迭代后,Array.includes将在第四个元素之后查找值,y没有它们。因此它返回undefined