I’m encountering some unexpected behavior in my JavaScript code which I’d like to understand. I want a one-line function to detect if a number exists inside an array of integers, the number being checked is the iterator of a loop in another array. I’m using the standard includes()
function, should note the same happens with an indexOf() >= 0
check. For this test we have the following code:
const array1 = [0, 1, 2, 3];
const array2 = [1, 2];
for(let i in array1)
console.log(array2.includes(i));
To my surprise each output returns false
instead of the expected false true true false
sequence. How can this be? I know I’m checking i
not arr[i]
, but i
still corresponds to the numbers included in those arrays: 0 is still 0, 1 is still 1, etc. Using arr.includes(1)
does return true, so why not arr.includes(i)
when i
is also 1?
>Solution :
for...in
loops through all properties, not values. Arrays are objects, and their properties are 0 ... array.length
, so i
inside the for
loop is 1
, 2
, 3
and 4
.
You should be using a for...of
loop instead:
const array1 = [0, 1, 2, 3];
const array2 = [1, 2];
for(let i of array1)
console.log(array2.includes(i));