Estoy tratando de tomar una lista de compras y compararla con las cosas que ya tienes y ponerla en una nueva lista. Estoy aprendiendo a iterar a través de las listas y no puedo entender por qué obtengo el resultado que obtengo. Quiero que el resultado sea una lista de cosas que no se encuentran en la lista de cosas que ya tienes. La salida en este momento imprime lo que necesito pero varias veces. No estoy seguro de por qué. Gracias
let groceryList = ['Bread', 'Cereal', 'Bagels', 'Water', 'Apple']; let currentGrocery = ['Eggs', 'Lettuce', 'Milk', 'Cheese','Bread','Water','Oil']; let newList = []; for (let i = 0; i < groceryList.length; i++) { for (let j = 0; j < currentGrocery.length; j++){ if (groceryList[i] !== currentGrocery[j]){ newList.push(groceryList[i]); } } } console.log(newList);let groceryList = ['Bread', 'Cereal', 'Bagels', 'Water', 'Apple']; let currentGrocery = ['Eggs', 'Lettuce', 'Milk', 'Cheese','Bread','Water','Oil']; let newList = []; currentGrocery.forEach(item =>{ if (!groceryList.includes(item)) newList.push(item); }) console.log(newList);Podría filtrar la matriz.
const groceryList = ['Bread', 'Cereal', 'Bagels', 'Water', 'Apple'], currentGrocery = ['Eggs', 'Lettuce', 'Milk', 'Cheese', 'Bread', 'Water', 'Oil'], newList = currentGrocery.filter(item => !groceryList.includes(item)); console.log(...newList);Empuje el artículo de su lista de compras para cada tienda de comestibles actual que no coincida. Lo que desea hacer es ingresar a la nueva lista solo si no hay coincidencias de comestibles actuales.
De una manera ingenua, esto podría lograrse a través de
let found = false; for (let i = 0; i < groceryList.length; i++) { for (let j = 0; j < currentGrocery.length; j++){ if (groceryList[i] == currentGrocery[j]){ found = true; break; } } if (found) { newList.push(groceryList[i]); found = false; } }Un enfoque más legible hace uso de las funciones filter() e include() :
let newlist = groceryList.filter(item => !currentGrocery.includes(item)); console.log(newlist);