Javascript在for循环中创建数组

时间:2017-01-03 23:05:45

标签: javascript arrays for-loop

我很确定这是一个基本问题,但我的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中使用?

提前致谢

2 个答案:

答案 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是函数的起点(例如,在第一次迭代时)。