我编写了一段代码,在迭代时从数组中删除元素。
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);
}
有人可以建议哪种方式最好,并建议是否有其他最佳方式来实现它。
答案 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);
}
<强>循环强>
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;
同样正如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; }); }