Esto parece un problema muy sencillo, pero por mi vida, no puedo solucionarlo.
Quiero comparar dos matrices y si el valor de la matriz2 está en la matriz1, empújelo a una nueva matriz; de lo contrario, presione un 0.
estas son mis matrices:
let arrayOne = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]; let arrayTwo = [3, 4, 5, 8, 9, 10, 12, 13, 14, 15, 16];resultado deseado es
[0,0,3,4,5,0,0,8,9,10,11,12,13,14,15,16,0,0]intento actual con problemas de índices obvios
let newArray = []; for (let i=0; i < arrayOne.length; i++){ if(arrayTwo.includes(i)) newArray.push(arrayTwo[i]); else newArray.push(0); };resultado actual
[0, 0, 0, 8, 9, 10, 0, 0, 13, 14, 15, 16, undefined, undefined, undefined, undefined, undefined, 0]El problema con su enfoque es que está buscando un índice en arrayTwo
if(arrayTwo.includes(i)) newArray.push(arrayTwo[i]); donde i es el índice no un valor. Es por eso que está obteniendo valores undefined , porque arrayTwo tiene menos valores que arrayOne, por lo que el índice de arrayOne no existirá en arrayTwo.
En su lugar, debe buscar el valor en arrayTwo
for (let i=0; i < arrayOne.length; i++){ let value = arrayOne[i]; if(arrayTwo.includes(value)) newArray.push(value); else newArray.push(0); }; Si comprobáis solamente la existencia del valor en la colección, usad Set que ha diseñado exactamente para esto.
let arrayOne = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]; let values = new Set([3, 4, 5, 8, 9, 10, 12, 13, 14, 15, 16]); const result = arrayOne.map(value => values.has(value) ? value : 0); // => [0,0,3,4,5,0,0,8,9,10,11,12,13,14,15,16,0,0]