繁体   English   中英

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

[英]How to loop over an object which contains objects in Javascript

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

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

此对象的大小会发生变化。

每次调用该函数时,我想循环遍历帖子,并对评级求和。 我想将评分除以帖子中的项目数。

我试过做这样的事情

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

        });

但无法获得实际数据

谢谢

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

 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

哦,对于初学者来说,你循环遍历一个只有键的数组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
        }

    }

我有一个对象(让我们称之为帖子) 我们称之为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); 

我解释了这一切,所以你不要只是复制和粘贴它。 请阅读说明。

由于它是一个数组,因此交替方式是使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM