如何循环包含Javascript中的对象的对象

时间:2019-04-26 11:01:34

标签: javascript node.js loops

我有一个看起来像这样的对象(简称为帖子)

[ { _id: 5cc2d552939a9b290bfaee18,
    rating: 1,
    __v: 0 },
  { _id: 5cc2d6362c9b3729253d14eb,
    rating: 4,
    __v: 0 } ]

该对象的大小改变。

每次调用该函数时,我都要遍历帖子并求和。然后,我想将等级除以帖子中的项目数。

我试图做这样的事情

Object.keys(posts).forEach(function (item, value) {

        });

但是无法获取实际数据

谢谢

4 个答案:

答案 0 :(得分:0)

  

您有一个数组,而不是对象。您需要遍历数组,而不是   对象

 let posts = [ 
{ _id: 5cc2d552939a9b290bfaee18,rating: 1, __v: 0 },
{ _id: 5cc2d6362c9b3729253d14eb,rating: 4,__v: 0 } 
], sum = 0, average = 0;

//so you need the average of the ratings, get the sum of the ratings

posts.map(post => sum += post.rating);

//divide the sum by the length of the items

average = sum/posts.length

答案 1 :(得分:0)

哦,对于初学者来说,您遍历仅包含键Object.keys的数组就可以得到键,而不是值,这样就没用了。

    function getAverageRating(posts, detailed)
    {
        let totalPosts = 0;
        let totalRatings = 0;
        posts.forEach(function (item, index) {
            totalRatings += item.rating;
            totalPosts++;
        });
        if(detailed){
            return {"total_posts":totalPosts, "sum_ratings":totaltotalRatings, "avg":totaltotalRatings/totalPosts}
        }else{
            return totaltotalRatings/totalPosts
        }

    }

答案 2 :(得分:0)

我有一个对象(可称其为帖子)。我们称其为arraymap。而且,您始终可以遍历数组。您可以为此使用简单的for循环。

循环遍历将使您的数组元素一个接一个,在您的情况下就是对象。现在,您可以轻松获取每个对象的rating属性值并将它们相加,然后除以数组的长度。

您应该以类似

的结尾

var data = [ { _id: '5cc2d552939a9b290bfaee18',
        rating: 1,
        __v: 0 },
      { _id: '5cc2d6362c9b3729253d14eb',
        rating: 4,
        __v: 0 } ];

    var sum = 0;
    
    for(var i=0; i< data.length; i++){
      sum = sum + data[i].rating;
    }

    var result = sum/data.length;
    
    console.log(result);

我已经解释了所有内容,所以您不仅可以复制并粘贴它。请阅读说明。

答案 3 :(得分:0)

由于它是一个数组,因此交替方式是使用reduce

const items = [ { _id: '5cc2d552939a9b290bfaee18',
    rating: 1,
    __v: 0 },
  { _id: '5cc2d6362c9b3729253d14eb',
    rating: 4,
    __v: 0 } ];
    

// make sure to calculate when there are items
if (items.length) {
  const sumRating = items.reduce((sum, item) => sum + item.rating, 0);

  const average = sumRating / items.length;

  console.log(average);
}

参考:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce