arrays - 检索数据和平均值的对象数组
问题描述
我刚刚开始学习 JavaSCript,但在这个练习中遇到了一些麻烦。我有一个对象数组,其中包含大约 250 个对象。其中有多部电影(我只粘贴了数组中的前 2 部电影,但结构相同):
创建一个 DramaMoviesRate() 函数,该函数接收一个数组作为参数,以获取所有戏剧电影的平均速率!让我们看看它是否比一般平均水平更好。
再次四舍五入到小数点后两位!
我的逻辑是:1)只选择包含字符串“戏剧”的电影,2)计算它们的平均值。
我的问题是:根据测试,我应该将所有内容存储到一个函数中。其次,当我尝试过滤戏剧电影时,我还会得到其他不包含该字符串的电影作为输出。请使用 JS ES5 语法,谢谢。
PS:我必须只使用我知道的方法:filter() map() reduce() sort() reverse() slice()
let movies = [
{
title: "The Shawshank Redemption",
year: 1994,
director: "Frank Darabont",
duration: "2h 22min",
genre: ["Crime", "Drama"],
rate: 9.3,
},
{
title: "The Godfather",
year: 1972,
director: "Francis Ford Coppola",
duration: "2h 55min",
genre: ["Crime", "Drama"],
rate: 9.2,
}
]
function howManyDrama(phDrama) {
const drama = phDrama.filter(function (movie) {
return (
movie.genre.includes('Drama')
);
});
return drama;
} ==>//HERE I DON'T GET THE RIGHT OUTPUT
//console.log(movies)
function dramaMoviesRate(pdrama){
const average = pdrama.reduce(function(acc, movie){
return acc + movie.rate
},0);
return Math.round((average / pdrama.length) * 100) / 100;
}
-----------------------------------------------------------------
-----------------------------------------------------------------
//I also thought to filter my drama movies and then store the //function that has an array as output as argument of my second //function like this:
function howManyDrama(phDrama) { //thats the fist to filter //drama with incorrect output
const drama = phDrama.filter(function (movie) {
return (
movie.genre.includes('Drama')
);
});
return drama;
}
function dramaMoviesRate(howManyDrama){
const average = howManyDrama.reduce(function(acc,movie){
return acc.movie.rate
},0);
return Math.round((average / howManyDrama.length) * 100) / 100
}
howManyDrama(movies)
dramaMoviesRate(howManyDrama)
请使用 ES5 语法。谢谢你的耐心!
解决方案
我跑了你的代码。戏剧过滤器工作正常。我更新了总计过程以更清洁。我无法让 reduce 方法正常工作,所以我使用 map 代替。
试试这个代码:
let movies = [
{
title: "The Shawshank Redemption",
year: 1994,
director: "Frank Darabont",
duration: "2h 22min",
genre: ["Crime", "Drama"],
rate: 9.3,
},
{
title: "The Godfather",
year: 1972,
director: "Francis Ford Coppola",
duration: "2h 55min",
genre: ["Crime", "Drama"],
rate: 9.2,
},
{
title: "Mission Impossible",
year: 1999,
director: "zzz",
duration: "2h 55min",
genre: ["Action"],
rate: 7.2,
}
]
function howManyDrama(phDrama) {
const drama = phDrama.filter(function (movie) {
return (
movie.genre.includes('Drama')
);
});
return drama;
}
function dramaMoviesRate(pdrama){
let total = 0
let result = pdrama.map(x => total += x.rate);
return total/pdrama.length
}
let m = howManyDrama(movies)
console.log(m) //correct
let r = dramaMoviesRate(m)
console.log(r) // correct
// do everything in single function
function dramaRate(movielist) {
const drama = movielist.filter(function (movie) {
return (
movie.genre.includes('Drama')
);
});
let total = 0
let result = drama.map(x => total += x.rate);
return total/drama.length
}
console.log(dramaRate(movies)) //single function call
推荐阅读
- javascript - 问题 DMing 用户:无法读取未定义的属性“getMaxListeners”
- c# - MassTransit 和 RabbitMQ 在本地工作,但在生产中会跳过消息
- javascript - 如何键入自定义钩子 useStateWithCallback React TypeScript
- apache-kafka - Kafka连接源和目标之间的记录计数不匹配
- r - 使用 RMarkdown 时,有没有办法插入图像 (png)、编织和生成 html 文件,我可以通过电子邮件发送并仍然显示图像?
- python - PyGTK + Glade:没有任何信号的按钮触发另一个信号
- google-apps-script - Gsuite 日历插件 onEventUpdated 触发异常 很抱歉,发生服务器错误。请稍等,然后重试
- bash - 如何在 chrooted SSH Plesk 托管的网络空间环境中忽略 shebang "#!/usr/bin/env bash"
- here-api - 地理编码和搜索 API:与自由格式搜索查询一起使用时,合格查询不返回街道地址
- javascript - 当静态中有文件夹时,Flask url_for 不起作用