如何在Javascript或JQuery中获得对象数组中对象的特定属性的总和?
我有一个对象数组。我希望能够创建一个函数,该函数将求和并返回每个为真的isSaved字段如何在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
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的解决方案。如果我们把它扩展到“使用外部库”,那么这个建议就非常合适了。我真的很喜欢这个解决方案我真的很喜欢这个解决方案