javascript - 如果参数中给出,则从数组中删除元素

标签 javascript arrays

我正在尝试(再次)掌握 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/

相关文章:

c - 在整数数组中找到最大的对和

c++ - 反向数组 - 没有第一个数字

sql - Postgresql 从日期数组之间的日期范围中选择

javascript - 我该怎么做这个向后看

javascript - Cannon JS - 启动具有属性的主体后的位置向量 NaN

arrays - 字典中每个项目的第一个成员需要是一个数组

python - 如何将写在 *.txt 文件中的单个大数字转换为其单个数字的 numpy 数组?

javascript - 选择下拉菜单输入多个选择。 JavaScript

javascript - 获取影子根宿主元素

javascript - 如何从本地存储中获取数据并以 Angular 显示在表格中?