如果我有一个javascript数组
[1, 2, 5, 7, 5, 4, 7, 9, 2, 4, 1]
我想搜索该数组并删除一个特定的数字,例如4给我
[1, 2, 5, 7, 5, 7, 9, 2, 1]
最好的方法是什么
我觉得它可能看起来像
for(var i = 0; i < myarray.length; i++) {
if(myarray[i] == 4) {
myarray.remove(i)
}
}
但是数组没有remove
函数。此外,如果我从数组中删除一个元素,它会弄乱我的i
,除非我纠正它。
答案 0 :(得分:4)
您可以使用.splice()
从数组中删除一个或多个项目,如果从数组的前后迭代,则删除项目时索引不会搞砸。
var arr = [1, 2, 5, 7, 5, 4, 7, 9, 2, 4, 1];
for (var i = arr.length - 1; i >= 0; i--) {
if (arr[i] == 4) {
arr.splice(i, 1);
}
}
答案 1 :(得分:3)
就个人而言,我喜欢使用过滤方法的可重复使用功能:
//generic filter:
function without(a){return this!=a;}
//your data:
var r= [1, 2, 5, 7, 5, 4, 7, 9, 2, 4, 1];
//your data filtered against 4:
var no4=r.filter(without, 4);
//verify no 4s:
alert(no4); //shows: "1,2,5,7,5,7,9,2,1"
如果你想让它改变原始数组,你可以擦除并将新值推送到旧数组中:
function without(a){return this!=a;}
var r= [1, 2, 5, 7, 5, 4, 7, 9, 2, 4, 1], //orig
r2=r.slice(); //copy
r.length=0; //wipe orig
[].push.apply( r, r2.filter(without, 4)); //populate orig with filtered copy
r; // == [1, 2, 5, 7, 5, 7, 9, 2, 1]
答案 2 :(得分:1)
John Resig ,jQuery的创建者创建了一个非常方便的Array.remove方法,我总是在我的项目中使用它。
// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};
所以,你可以像这样使用你的代码:
// Remove the second item from the array
myarray.remove(1);
// Remove the second-to-last item from the array
myarray.remove(-2);
// Remove the second and third items from the array
myarray.remove(1,2);
// Remove the last and second-to-last items from the array
myarray.remove(-2,-1);
---编辑----
for(var i = 0; i < myarray.length; i++) {
if(myarray[i] == 4) {
myarray.remove(i);
}
}
使用这样的代码删除特定值。
答案 3 :(得分:1)
这是一个基于索引
的删除功能function remove(array, index){
for (var i = index; i < arr.length-1; i++) {
array[i] = array[i+1];
}
}
基本上,这样做会将所有元素从索引转移到“左”。不太确定拼接是如何工作的,但我猜它的工作方式完全相同。
在您的代码中添加该功能后,您只需要做的就是。
for(var i = 0; i < myarray.length; i++) {
if(myarray[i] == 4) {
remove(myarray,i);
}
}
答案 4 :(得分:1)
我更喜欢做这样的事情:
removeEmail(event){
myarray.splice(myarray.indexOf(event.target.id), 1)
}
myaraay.splice() 要删除 myarray.indexOf() 会给出数字或您想从数组内部删除的任何内容。这是最简单的方法,不需要循环。 :)