Fiona Runge
Fiona Runge

Reputation: 2311

Array confusion with find and includes

Given the following arrays:

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];

Using node v 7.3.0 I observe the following unexpected behavior:

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

Sample Snippet:

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))

However code like x.find(element => y.includes(element)); always finds the element as expected.

I don't get why the two calls that just use find and includes would ever yield different results and would be delighted if someone knows an explanation.

Upvotes: 9

Views: 110

Answers (1)

Rajesh
Rajesh

Reputation: 24945

The reason x.find(y.includes, y); is returning undefined is because of arguments passed in function.

Callback of Array.find expects 3 values viz., item, index, array and callback of Array.includes expects 2 arguments, viz., item, fromIndex.

Basically, your current index will be treated as fromIndex in Array.includes and will skip elements before it.

So after four iterations would look like, Array.includes will look for values after 4th element and y does not have them. Hence it returns undefined.

Upvotes: 5

Related Questions