Array.prototype.remove = function (obj) {
for(var i = 0; i < this.length; i++) {
if(this[i] === obj) {
if (i == this.length) {
this[i] = null;
} else {
for(var j = i; j < this.length-1; j++) {
this[j] = this[j+1];
}
delete this[j]; // updated from this[j] = null; still not working.
}
}
}
return this;
};
用以下方式调用它:
write("ARRAY TEST = " + [22, 33, 44].remove(33).remove(22));
..它打印:
44,,
为什么这两个逗号以及如何修复我的删除功能以删除逗号?
答案 0 :(得分:3)
delete
上的 Array
不会删除该元素,它会将其设置为undefined
。由于打印时undefined
会产生空字符串,因此会解释write()
的结果。
您需要使用splice()
删除该元素。如果你将它与indexOf
结合使用(你可能需要为旧浏览器定义它),你会得到一个相当短的功能:
Array.prototype.remove = function (obj) {
this.splice(this.indexOf(obj), 1);
return this;
}
PS:我不是扩大原生原型的倡导者......
答案 1 :(得分:1)
将项目设置为null会在数组中留下一个项目(但它是一个空项目),这就是为什么你仍然看到逗号。
答案 2 :(得分:1)
如前所述,删除或将项设置为null仍会将项留在数组中。你想要使用的是Array.splice
这是一个应该有效的实现:
Array.prototype.remove = function (obj) {
for(var i = 0; i < this.length; i++) {
if(this[i] === obj)
{
this.splice(i,1);
break;
}
}
return this;
};
答案 3 :(得分:0)
您不会从刚刚设置为null的数组中删除元素。 如果您需要灵感,请查看此删除方法。它是按索引而不是按元素。
http://ejohn.org/blog/javascript-array-remove/
尝试:
Array.prototype.remove = function (obj) {
for(var i = 0; i < this.length; i++) {
if(this[i] === obj) {
if (i == this.length) {
this.splice(i,1);
} else {
for(var j = i; j < this.length-1; j++) {
this[j] = this[j+1];
}
this.splice(j,1);
}
}
}
return this;
};
答案 4 :(得分:-1)
Array.prototype.remove = function (obj) {
for(var i = 0; i < this.length; i++) {
if(this[i] === obj) {
if (i == this.length) {
#this[i] = null;
delete this[i];
} else {
for(var j = i; j < this.length-1; j++) {
this[j] = this[j+1];
}
#this[j] = null;
delete this[i];
}
}
}
return this;
};
很确定这就是你想要的