由于我不得不从我的数组中删除一些元素,所以我在stackoverflow中找到了几段代码并提出了这个:
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);
};
然而,由于某些原因,只要某些内容与数组相关,这段代码就会被打印出来。
示例:
这段代码:
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);
};
Scadenza.prototype.init = function() {
this.promemoria = (this.promemoria == "")?("NO"):(this.promemoria);
var gruppo = this.group; // convert array to string.
this.group = "";
for (var i in gruppo) {
if (i != (gruppo.length - 1)) {
this.group += gruppo[i] + ", ";
}
else {
this.group += gruppo[i];
}
}
alert(this.group);
};
这段代码应该将数组this.group(暂时存储在变量“gruppo”中)转换为字符串(我认为这很明显)。
当然,如果它不是它的警报,那么它的工作就会很大:
[DATA NEEDED]函数(from,to){var rest = this.slice((to || from) + 1 || this.length); this.length = from&lt; 0? this.length + from:from; return this.push.apply(this,rest); }
这段代码也通过AJAX请求发送到数据库,查询结果在所需的coloumn中就是这样:
function(from,to){var rest = this.slice((to to | from)+ 1 || this.length); this.length = from&lt; 0? this.length + from:from; return this.push.apply(this,rest); },
我很惊讶这种情况正在发生,但我绝对不知道如何解决它。
加载页面或单击抛出此事件的按钮时,未发现任何错误。
有什么想法吗?
ps:不确定是否有帮助,但我正在使用jQuery。
@comments:
正常for循环实际上并不能解决这个问题:
Scadenza.prototype.init = function() {
this.promemoria = (this.promemoria == "")?("NO"):(this.promemoria);
var gruppo = this.group; // convert array to string.
this.group = "";
for (var i = 0; i < gruppo.length; i++) {
if (i != (gruppo.length - 1)) {
this.group += gruppo[i] + ", ";
}
else {
this.group += gruppo[i];
}
}
alert(this.group);
};
警报仍然相同。
答案 0 :(得分:4)
使用正确的for (var i=0; i<arr.length; i++)
循环来迭代数组。 for in
enumerations will enumerate prototype properties as well,不要在数组上使用它们。您正在使用init
方法执行此操作。
顺便说一下,无论如何你想要使用.join
:
Scadenza.prototype.init = function() {
if (this.promemoria == "")
this.promemoria = "NO";
this.group = this.group.join(", "); // convert array to string
alert(this.group);
};
答案 1 :(得分:3)
更改Array
原型时,该方法将作为新属性添加到Array对象中。当您使用for (var attr in object)
进行迭代时,您将迭代对象及其所有属性。因此,您的新方法包含在该循环中。
您需要使用for (var i=0; i<a.length; i++)
循环。那只会包含数组中的项目。