0

由于我必须从数组中删除一些元素,因此我遵循了在 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”中)转换为字符串(我认为这很明显)。

当然,如果不是它的警报是:

[需要数据]function (from, to) { var rest = this.slice((to || from) + 1 || this.length); this.length = 从 < 0 开始?this.length + from : from; 返回 this.push.apply(this, rest); }

这段代码也通过 AJAX 请求发送到数据库,查询的结果在所需的列中是这样的:

function (from, to) { var rest = this.slice((to || from) + 1 || this.length); this.length = 从 < 0 开始?this.length + from : from; 返回 this.push.apply(this, rest); },

我很惊讶这种情况正在发生,但我完全不知道如何解决它。

加载页面或单击引发此事件的按钮时,未警告任何错误。

任何的想法?

ps:不确定是否有帮助,但我正在使用 jQuery。

@评论:

正常的 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);
};

警报还是一样的。

4

2 回答 2

4

使用适当的for (var i=0; i<arr.length; i++)循环来迭代数组。for inenumerations 也会枚举原型属性,不要在数组上使用它们。例如,您正在您的init方法中这样做。

顺便说一句,对于您想要使用的任务.join

Scadenza.prototype.init = function() {
    if (this.promemoria == "")
        this.promemoria = "NO";
    this.group = this.group.join(", "); // convert array to string
    alert(this.group);
};
于 2013-09-18T17:21:10.460 回答
3

当您更改Array原型时,该方法将作为新属性添加到 Array 对象中。当您迭代时,for (var attr in object)您正在迭代对象及其所有属性。因此,您的新方法包含在该循环中。

您需要使用for (var i=0; i<a.length; i++)循环。这将只包括数组中的项目。

于 2013-09-18T17:21:20.383 回答