我很确定这是一个基本问题,但我的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中使用?
提前致谢
答案 0 :(得分:1)
惯用的javascript看起来像(对于你的第一个函数):
function postsCalc(arrayEntry) {
var postsOutput = {
postLikes: 0
};
for (var i = 0, len = arrayEntry.length; i < len; i++) {
postsOutput.postLikes += arrayEntry[i].likes.summary.total_count;
}
return postsOutput;
}
或者,现在我们可以假设.forEach存在:
function postsCalc(arrayEntry) {
var postsOutput = {
postLikes: 0
};
arrayEntry.forEach(function(entry) {
postsOutput.postLikes += entry.likes.summary.total_count;
}
return postsOutput;
}
答案 1 :(得分:1)
您可以使用列表中的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)
其中callback = function(a, b)
其中a
是累加器(例如跟踪总和等),b
是项目的表示形式你正在迭代列表。 initialValue
是函数的起点(例如,在第一次迭代时)。