如何在Javascript或JQuery中获得对象数组中对象的特定属性的总和?

如何在Javascript或JQuery中获得对象数组中对象的特定属性的总和?,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个对象数组。我希望能够创建一个函数,该函数将求和并返回每个为真的isSaved字段 var arrInductedInfo = []; var InductedInfo = function () { }; InductedInfo.prototype = { SerialNumber: null, isSaved: false, TestData: function (msg) { this.testfield = msg; al

我有一个对象数组。我希望能够创建一个函数,该函数将求和并返回每个为真的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;
}

有没有一种更通用的方式来实现这一点?感谢您的帮助。

查找提供一些函数式方法的库

您可以使用reduce来实现这一点

var sum = _.reduce(arrInductedInfo, function(memo, item){ return memo + (item.isSaved ? 1 : 0); }, 0);

查找提供一些函数样式方法的库

您可以使用reduce来实现这一点

var sum = _.reduce(arrInductedInfo, function(memo, item){ return memo + (item.isSaved ? 1 : 0); }, 0);

您必须在
数组.prototype
中创建一个函数。您不能在
inducedInfo.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

您必须在
数组.prototype
中创建一个函数。您不能在
inducedInfo.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

为了确保每个
InductedInfo
都有自己的数组可操作,您可以在构造函数中添加一个作为属性:

var InductedInfo = function() {
    this.arr = [];
};
然后您的
TotalSaved
函数将如下所示:

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

为了确保每个
InductedInfo
都有自己的数组可操作,您可以在构造函数中添加一个作为属性:

var InductedInfo = function() {
    this.arr = [];
};
然后您的
TotalSaved
函数将如下所示:

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

将数组传递给函数?或将
inducedInfo
的每个实例都赋予它自己的数组。这两种方法都有效,但我已经想到并拒绝了第一种方法。如果你把它贴出来,我会把迈克的作为答案。谢谢你们两位。将数组传递给函数?或者给每个
InductedInfo
实例一个自己的数组。这两种方法都有效,但我已经想到并拒绝了第一种方法。如果你把它贴出来,我会把迈克的作为答案。谢谢你们两位。如果他不支持传统浏览器,他也可以使用。虽然这可能有帮助,但这并不能回答问题。@sgroves:OP要求可能使用jQuery的解决方案。如果我们将其扩展为“使用外部库”,那么这个建议非常合适。如果他不支持传统浏览器,他也可以使用。虽然这可能有帮助,但这并不能回答问题。@sgroves:OP要求可能使用jQuery的解决方案。如果我们把它扩展到“使用外部库”,那么这个建议就非常合适了。我真的很喜欢这个解决方案我真的很喜欢这个解决方案