Повторение, хотя список проблем

#javascript

Вопрос:

Я пытаюсь взять список покупок из списка, сверить его с тем, что у вас уже есть, и поместить в новый список. Я учусь перебирать списки и не могу понять, почему я получаю тот результат, который я есть. Я хочу, чтобы на выходе был список вещей, которые не были найдены в списке вещей, которые у вас уже есть. На выходе в данный момент выводится то, что мне нужно, но несколько раз. Не уверен, почему. Спасибо

 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); 

Комментарии:

1. pease добавьте желаемый результат.

Ответ №1:

 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);
 

Ответ №2:

Вы можете фильтровать массив.

 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); 

Ответ №3:

Вы нажимаете на товар из своего списка покупок для каждого несоответствующего текущего продукта. Что вы хотите сделать, так это перейти к новому списку только в том случае, если нет совпадений с текущими продуктами.

Наивным способом этого можно было бы достичь с помощью

 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;
    }
}
 

Более понятный подход использует filter() и включает в себя функции():

 let newlist = groceryList.filter(item => !currentGrocery.includes(item));
console.log(newlist);