我正在尝试(再次)掌握 JavaScript,但到目前为止进展并不顺利。
挑战:
You will be provided with an initial array (the first argument in the destroyer function), followed by one or more arguments. Remove all elements from the initial array that are of the same value as these arguments.
为什么下面的代码没有删除第二个测试用例所需的元素?
function destroyer(arr) {
console.log(arguments);
for (var array_i = 0; array_i < arr.length; array_i++){
for (var arg_i = 1; arg_i < arguments.length; arg_i++){
console.log("indexes", array_i, arg_i);
if (arr[array_i] === arguments[arg_i]){
console.log(arr[array_i], arguments[arg_i], "destroyed");
arr.splice(array_i, 1);
console.log(arr, arguments);
array_i = 0;
arg_i = 1;
}
}
}
return arr;
}
它在这里成功运行:
destroyer([3, 5, 1, 2, 2], 2, 3, 5);
但不在这里:
destroyer([2, 3, 2, 3], 2, 3);
最佳答案
您正在尝试通过重置索引来补偿一路删除的元素。如果从数组的末尾删除,就会简单得多(并且实际上有效)。无需重置。
function destroyer(arr) {
for (var array_i = arr.length - 1; array_i >= 0; array_i--){
for (var arg_i = 1; arg_i < arguments.length; arg_i++){
if (arr[array_i] === arguments[arg_i]){
arr.splice(array_i, 1);
break;
}
}
}
return arr;
}
console.log( destroyer([2, 3, 4, 2, 3], 2, 3) ); // [4]
console.log( destroyer([2, 3, 2, 3], 2, 3) ); // []
关于javascript - 如果参数中给出,则从数组中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34498475/