No encuentro explicación a lo siguiente. ¿Por qué está pasando esto?
let mainArr = [ [1], [2] ] let subArr = [1] let result = mainArr.includes(subArr) *//output: false*además
let mainArr = [ [1], [2] ] let subArr = [1] let result = mainArr.indexOf(subArr) *//output: -1*Este es mi código original:
let mainArr = [ [ 'apple', 1 ], [ 'bat', 2 ], [ 'cookie', 2 ] ] let subArr = [ [ 'apple', 1 ] ] *//with let subArr = [ 'apple', 1 ] will be also -1* let result = mainArr.indexOf(subArr) *//output: -1*no lo entiendo...
La matriz [1] que es el primer elemento de la variable mainArr , y la otra matriz [1] , que es el valor de la variable subArr , no son la misma matriz. Son dos matrices diferentes, ambas con 1 como único elemento. Es por eso que obtiene falso cuando llama a includes y obtiene -1 cuando llama a indexOf . Si desea que sea la misma matriz, puede hacer lo siguiente:
let subArr = [1]; // create the [1] array and store a reference to it inside the subArr variable let mainArr = [subArr, [2]]; // assign the subArr variable as the first element of the mainArr array let result = mainArr.includes(subArr); // result is trueLas matrices se consideran Objects en javascript. Solo los tipos primitivos, como strings y integers , se pueden comparar por su valor en javascript. Desafortunadamente, los Objects se comparan por su referencia (también conocido como el lugar donde están almacenados en la memoria). -- Cada vez que se crea un objeto, se le da una referencia a un espacio donde se almacena en la memoria -- Entonces, aunque un objeto parezca idéntico, su referencia no lo es.
Para comparar ambos, tendría que atravesar una matriz y comparar cada valor con el índice correspondiente de la segunda matriz. Algo como:
for (let i = 0; i < mainArr.length; i++){ if (mainArr[i] !== subArr[i]){ //not the same } else { continue }