Я пытаюсь создать этот скрипт: https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/intermediate-algorithm-scripting/seek-and-destroy
После комментария «Проверить и удалить» у меня возникла проблема. Я пытаюсь проверить все элементы из массива 'theCheck' с элементами из 'разрушителей', и если элементы не совпадают, то скрипт добавит это значение в выходной массив.
Но он толкает каждый элемент независимо.
Ожидаемое выходное значение: [1,1]
Текущее значение выходного значения: [1,2,3,1,2,3]
function destroyer(arr) {
let theCheck = [];
let destroyers = [];
let output = [];
for (let i = 1; i < arguments.length; i++) {
destroyers.push(arguments[i]);
}
for (let i = 0; i < arguments[0].length; i++) {
theCheck.push(arguments[0][i])
}
//Verify and delete
var j = 0
for (let i = 0; i < theCheck.length; i++) {
for (j = 0; j < destroyers.length; j++) {
if (theCheck[i] !== destroyers[j]) {
output.push(theCheck[i])
break;
}
}
}
console.info(theCheck)
console.info(destroyers)
console.info(output)
return arr;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


С текущим кодом вы просматриваете разрушители, и каждый раз, когда вы находите разрушителя, который не соответствует элементу, который вы проверяете, вы добавляете его в вывод. Но поскольку у вас есть два элемента в массиве разрушителей, гарантируется, что один из двух не будет соответствовать конкретному элементу, который вы проверяете.
Ниже приведена версия, в которой мы выясняем, найден ли какой-либо из разрушителей, соответствующий проверяемому элементу, и только если это не так, мы добавляем его в вывод:
function destroyer(arr) {
let theCheck = [];
let destroyers = [];
let output = [];
for (let i = 1; i < arguments.length; i++) {
destroyers.push(arguments[i]);
}
for (let i = 0; i < arguments[0].length; i++) {
theCheck.push(arguments[0][i])
}
//Verify and delete
var j = 0
for (let i = 0; i < theCheck.length; i++) {
let found = false;
for (j = 0; j < destroyers.length; j++) {
if (theCheck[i] === destroyers[j]) {
found = true;
}
}
if (!found) output.push(theCheck[i]);
}
console.info(theCheck)
console.info(destroyers)
console.info(output)
return arr;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);Вы можете использовать функцию включает в себя, чтобы немного привести это в порядок:
function destroyer(arr) {
let theCheck = [];
let destroyers = [];
let output = [];
for (let i = 1; i < arguments.length; i++) {
destroyers.push(arguments[i]);
}
for (let i = 0; i < arguments[0].length; i++) {
theCheck.push(arguments[0][i])
}
//Verify and delete
var j = 0
for (let i = 0; i < theCheck.length; i++) {
if (!destroyers.includes(theCheck[i]))
output.push(theCheck[i]);
}
console.info(theCheck)
console.info(destroyers)
console.info(output)
return arr;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);function destroyer(input, ...arr) {
return input.filter(element => !arr.includes(element));
}
console.info(destroyer([1, 2, 3, 1, 2, 3], 2, 3));