我有一个对象数组。我希望能够创建一个将求和并返回true的每个isSaved字段的函数。

var arrInductedInfo = [];
var InductedInfo = function () { };
InductedInfo.prototype = {
    SerialNumber: null,
    isSaved: false,

    TestData: function (msg) {
        this.testfield = msg;
        alert(this.testfield);
    }
};


我当前正在使用此方法,但是,正如您所看到的,我正在使用数组名称。我的意思是,它可以工作...但是它并不是真正可重用的,因为我正在调用数组的特定实例:

InductedInfo.prototype.TotalSaved = function () {
    var total = 0;
    for (var isSaved in arrInductedInfo) {
        if (isSaved) total += 1;
    }
    return total;
}


有没有办法以更通用的方式完成此任务?谢谢您的帮助。

最佳答案

您必须在Array.prototype中创建一个函数。您不能在InductedInfo.prototype中执行此操作。

Array.prototype.totalInductedInfoSaved = function() {
    var tot = 0;
    for (var i=0, el; el = this[i]; i++) {
        if (el instanceof InductedInfo && el.isSaved) tot ++;
    }
    return tot;
}

var arr = [new InductedInfo(), new InductedInfo()];
arr[0].isSaved = true;
arr.totalInductedInfoSaved();

> 1

arr[1].isSaved = true;
arr.totalInductedInfoSaved();

> 2

07-26 00:07