我有一个看起来像这样的对象(简称为帖子)
[ { _id: 5cc2d552939a9b290bfaee18,
rating: 1,
__v: 0 },
{ _id: 5cc2d6362c9b3729253d14eb,
rating: 4,
__v: 0 } ]
该对象的大小改变。
每次调用该函数时,我都要遍历帖子并求和。然后,我想将等级除以帖子中的项目数。
我试图做这样的事情
Object.keys(posts).forEach(function (item, value) {
});
但是无法获取实际数据
谢谢
答案 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)
我有一个对象(可称其为帖子)。我们称其为array
或map
。而且,您始终可以遍历数组。您可以为此使用简单的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