Cap*_*ack 68 javascript iteration bounds
我有一系列元素,需要从中删除某些元素.问题是JavaScript似乎没有为每个循环而且如果我使用for循环我遇到问题它基本上试图检查超出数组边界的元素,或者因为索引改变而缺少数组中的元素.让我告诉你我的意思:
var elements = [1, 5, 5, 3, 5, 2, 4];
for(var i = 0; i < elements.length; i++){
if(elements[i] == 5){
elements.splice(i, 1);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是当元素[1]被移除时,元素[2]变成元素[1].所以第一个问题是从未检查过某些元素.另一个问题是.length更改,如果我硬编码边界,那么我可能会尝试检查超出数组边界的元素.那么做这件非常简单的事情的最佳方法是什么?
Jea*_*rin 159
从顶部开始!
var elements = [1, 5, 5, 3, 5, 2, 4];
for(var i = elements.length -1; i >= 0 ; i--){
if(elements[i] == 5){
elements.splice(i, 1);
}
}
Run Code Online (Sandbox Code Playgroud)
Koo*_*Inc 33
你可以在filter这里使用这个方法:
var elements = [1, 5, 5, 3, 5, 2, 4].filter(function(a){return a !== 5;});
//=> elements now [1,3,2,4]
Run Code Online (Sandbox Code Playgroud)
或者如果你不想触摸elements:
var elementsfiltered
,elements = [1, 5, 5, 3, 5, 2, 4]
.filter( function(a){if (a!==5) this.push(a); return true;},
elementsfiltered = [] );
//=> elementsfiltered = [1,3,2,4], elements = [1, 5, 5, 3, 5, 2, 4]
Run Code Online (Sandbox Code Playgroud)
见MDN文档的filter
或者你可以扩展 Array.prototype
Array.prototype.remove = Array.prototype.remove || function(val){
var i = this.length;
while(i--){
if (this[i] === val){
this.splice(i,1);
}
}
};
var elements = [1, 5, 5, 3, 5, 2, 4];
elements.remove(5);
//=> elements now [1,3,2,4]
Run Code Online (Sandbox Code Playgroud)
var elements = [1, 5, 5, 3, 5, 2, 4];
var i = elements.length;
while (i--) {
if (elements[i] == 5) {
elements.splice(i, 1);
}
}
console.log(elements);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61251 次 |
| 最近记录: |