通过迭代从 java 脚本数组中删除元素的最佳方法是什么

What is the best way delete elements from java script array by iterating it?

本文关键字:元素 删除 最佳 是什么 方法 数组 迭代 java 脚本      更新时间:2023-09-26

我写了一段代码,在迭代数组时从数组中删除元素。

func_name: function (elementsArray) {
  var orig_Array = [10,20,30,40];
  for(var i=0; i < orig_Array.length; i++) {
    if(elementsArray.indexOf(orig_Array[i]) > -1) {
      orig_Array.splice(i, 1);
      i--; 
    }
  }
}

这工作得很好,但是当我发送审查时,我的审稿人说在迭代时操作数组是一种危险的做法,这在 java 等其他语言中会导致 concurrentModificationException。

所以他向我提出了上述要求的两种方法。1.) 将我不想删除的元素存储在一个临时数组中,然后用临时数组重新分配原始数组,这是我为此实现的代码。

func_name: function (elementsArray) {
  var tempArray = [];
  var orig_array = [10,20,30,40,50];
  orig_array.forEach(function (element) {
    if (elementsArray.indexOf(element) > -1) {
      tempArray.push(element);
    }
  });
  orig_array = tempArray;
}
2.) 存储我要从原始数组中删除的元素的

索引,然后以相反的顺序迭代 indexesArray,并使用拼接从原始数组中删除元素,这是我为第二种方法实现的代码。

func_name: function (elementsArray) {
  var indexesArray = [];
  var orig_array = [10,20,30,40,50];
  orig_array.forEach(function(element, index) {
    if(elementsArray.indexOf(element) > -1){
       indexesArray.push(index);
    }
  });
}
for (var i = indexesArray.length; i >= 0; i--) {
  orig_array.splice(i, 1);
}

有人可以建议哪种是最好的方法,并建议是否有任何其他最佳方法来实现它。

您可以使用 Array 的 filter 方法而不是迭代:

func_name: function (elementsArray) {
  var orig_Array = [10,20,30,40];
  orig_Array = orig_Array.filter(function(el) {
    return elementsArray.indexOf(el) < 0;
  });
}

这就是我通常总是从数组中删除项目的方式。就这么简单,然后你可以添加一个循环。

var testArray = ["12","13","14","15"];
var indexItem = testArray.indexOf("14");
if (indexItem >= 0) {
  arr.splice( indexItem, 1 );
  console.log(testArray);
}

Array.prototype.deleteItem = function(val) {
    var indexItem = this.indexOf(val); 
    if (indexItem >= 0) this.splice(indexItem, 1);
    return this;
}; 
var testArray = ["12","13","14","15"];
var newTestArray = testArray.deleteItem("14");
console.log(newTestArray);

另外,正如后面所说,您可以使用Array的过滤器方法而不是迭代

func_name: function (elementsArray) {
  var orig_Array = [10,20,30,40];
  orig_Array = orig_Array.filter(function(el) {
     return elementsArray.indexOf(el) < 0;
  });
}