我很确定这是一个基本问题,但我的 PHP 背景使我无法解决这个问题。我也无法在 SO 中找到更接近的解决方案。
我有一个对象数组,其中包含一个我想要循环求和的值。一切正常,但我想直接将这些值与输出中的另一个数组相加。
所以这是工作函数:
function postsCalc(arrayEntry) {
var postsOutput = [];
var postLikes = 0;
for (var i = 0, len = arrayEntry.length; i < len; i++) {
postLikes += arrayEntry[i].likes.summary.total_count;
}
postsOutput.likes = postLikes;
return postsOutput;
}
输出:
likes : 55555;
哪个效果很好,但我不能将它直接推送到数组键并避免必须执行 postsOutput.likes = postLikes
吗?
像这样:
function postsCalc(arrayEntry) {
var postsOutput = [];
for (var i = 0, len = arrayEntry.length; i < len; i++) {
postsOutput.likes += arrayEntry[i].likes.summary.total_count;
// or even a multidimensional:
postsOutput.totals.likes += arrayEntry[i].likes.summary.total_count;
}
return postsOutput;
}
这将输出与上面相同的内容,但避免了额外的步骤,这在 Javascript 中可能吗?
提前致谢
最佳答案
您可以使用 reduce在列表上执行此操作:
function postsCalc(arrayEntry) {
var postLikes = arrayEntry.reduce(function(a, b) {return a + b.likes.summary.total_count}, 0);
return {likes: postLikes};
}
它是这样工作的:Array.reduce(callback, initialValue)
where callback = function(a, b)
其中a
是累加器(例如跟踪总和等)和 b
是您在列表中迭代的项目的表示。 initialValue
是函数的起点(例如,在第一次迭代时)。
关于Javascript在for循环中创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41453725/