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

时间:2015-06-12 13:04:57

标签: javascript arrays

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

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。)存储我想从原始数组中删除的元素的索引,然后以相反的顺序迭代indicesArray并使用splice从原始数组中删除元素,这是我为第二种方法实现的代码

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

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

2 个答案:

答案 0 :(得分:3)

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

public ActionResult Register(int ID)
{
    var model = new RegisterModel();
    model.AvatarID = ID;
    return View(model);
}

答案 1 :(得分:0)

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

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

<强>循环

&#13;
&#13;
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);
&#13;
&#13;
&#13;

同样正如hindmost所说,您可以使用数组filter方法而不是迭代

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