Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 539
Jakob Runge Avatar asked Jun 02 '17 12:06

Jakob Runge


1 Answers

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.

like image 152
Rajesh Avatar answered Sep 25 '22 00:09

Rajesh