javascript - 如何在Javascript中合并两个对象并计算它们的平均值?
问题描述
我正在学习 TDD,我想创建一个函数来预期这个结果。
//What I expect
[
{book_id: 1, name:'NameBook', average: x},
{book_id: 2, name:'NameBook', average: x},
{book_id: 3, name:'NameBook', average: x},
{book_id: 4, name:'NameBook', average: x},
{book_id: 5, name:'NameBook', average: x},
{book_id: 6, name:'NameBook', average: x},
{book_id: 7, name:'NameBook', average: x},
]
我必须将两个对象与过滤器函数合并,但在计算 id 相等的这些值的平均值和总和时遇到困难。
我在这里发布我要做的事情https://jsfiddle.net/thiagolmoraes/5xsk7Lgw/1/
任何人都可以帮助我。
const getBooks = () => {
return [
{ id: 1, name: 'Python Data Science' },
{ id: 2, name: 'Python Machine Learning' },
{ id: 3, name: 'Development Flask' },
{ id: 4, name: 'Mongo Database' },
{ id: 5, name: 'ULM for Dummies' },
{ id: 6, name: 'Java for Dummies' },
{ id: 7, name: 'Learn Rust in 2 hours' },
]
}
const getRating = () => {
return [
{ book_id: 1, client_id: 1, rating: 4.5 },
{ book_id: 1, client_id: 4, rating: 5 },
{ book_id: 1, client_id: 25, rating: 5 },
{ book_id: 1, client_id: 2112, rating: 4 },
{ book_id: 2, client_id: 34, rating: 3 },
{ book_id: 2, client_id: 123, rating: 4 },
{ book_id: 2, client_id: 23, rating: 4 },
{ book_id: 2, client_id: 255, rating: 4 },
{ book_id: 3, client_id: 98, rating: 2 },
{ book_id: 3, client_id: 45, rating: 1 },
{ book_id: 3, client_id: 223, rating: 3 },
{ book_id: 3, client_id: 213, rating: 1.5 },
{ book_id: 4, client_id: 652, rating: 4.5 },
{ book_id: 4, client_id: 42, rating: 4.5 },
{ book_id: 4, client_id: 562, rating: 4.5 },
{ book_id: 5, client_id: 2, rating: 5 },
{ book_id: 5, client_id: 2, rating: 5 },
{ book_id: 5, client_id: 2, rating: 5 },
{ book_id: 6, client_id: 2, rating: 4.5 },
{ book_id: 6, client_id: 2, rating: 4.5 },
{ book_id: 6, client_id: 2, rating: 4.5 },
{ book_id: 7, client_id: 2, rating: 4.5 },
{ book_id: 7, client_id: 2, rating: 4.5 },
{ book_id: 7, client_id: 2, rating: 4.5 },
{ book_id: 7, client_id: 2, rating: 4.5 },
{ book_id: 7, client_id: 2, rating: 4.5 },
]
}
const getBooksWithRatings = () => {
return getBooks().map((book) => {
book.ratings = getRating().filter((r) => r.book_id === book.id);
return book;
});
};
console.log(getBooksWithRatings())
解决方案
好像你快到了。您只需要计算评级数组的总和,然后除以它的长度。这应该为您完成任务。
const getBooks = () => {
return [
{ id: 1, name: "Python Data Science" },
{ id: 2, name: "Python Machine Learning" },
{ id: 3, name: "Development Flask" },
{ id: 4, name: "Mongo Database" },
{ id: 5, name: "ULM for Dummies" },
{ id: 6, name: "Java for Dummies" },
{ id: 7, name: "Learn Rust in 2 hours" },
];
};
const getRating = () => {
return [
{ book_id: 1, client_id: 1, rating: 4.5 },
{ book_id: 1, client_id: 4, rating: 5 },
{ book_id: 1, client_id: 25, rating: 5 },
{ book_id: 1, client_id: 2112, rating: 4 },
{ book_id: 2, client_id: 34, rating: 3 },
{ book_id: 2, client_id: 123, rating: 4 },
{ book_id: 2, client_id: 23, rating: 4 },
{ book_id: 2, client_id: 255, rating: 4 },
{ book_id: 3, client_id: 98, rating: 2 },
{ book_id: 3, client_id: 45, rating: 1 },
{ book_id: 3, client_id: 223, rating: 3 },
{ book_id: 3, client_id: 213, rating: 1.5 },
{ book_id: 4, client_id: 652, rating: 4.5 },
{ book_id: 4, client_id: 42, rating: 4.5 },
{ book_id: 4, client_id: 562, rating: 4.5 },
{ book_id: 5, client_id: 2, rating: 5 },
{ book_id: 5, client_id: 2, rating: 5 },
{ book_id: 5, client_id: 2, rating: 5 },
{ book_id: 6, client_id: 2, rating: 4.5 },
{ book_id: 6, client_id: 2, rating: 4.5 },
{ book_id: 6, client_id: 2, rating: 4.5 },
{ book_id: 7, client_id: 2, rating: 4.5 },
{ book_id: 7, client_id: 2, rating: 4.5 },
{ book_id: 7, client_id: 2, rating: 4.5 },
{ book_id: 7, client_id: 2, rating: 4.5 },
{ book_id: 7, client_id: 2, rating: 4.5 },
];
};
const getBooksWithRatings = () => {
return getBooks().map((book) => {
const ratings = getRating().filter((r) => r.book_id === book.id);
book.average = ratings.reduce((acc, el) => acc + el.rating, 0) / ratings.length;
return book;
});
};
console.log(getBooksWithRatings());
推荐阅读
- pandas - 查找 pandas 中最新快照的计数总和
- angular - Angular Material table dynamic columns
- javascript - PDO 不与混合应用程序上的数据库连接
- java - 将整个对象发送到前端(包括密码)是否有意义?
- docker - 使用 windows docker 容器中的本地帐户访问同一网络上的机器
- android - wifiManager.startScan() 返回 false
- amazon-web-services - Cognito 刷新令牌是“有效”的 JSON Web 令牌吗?
- php - 从 Magento 2 的配置路径获取 system.xml 中的后端模型
- typescript - 是否可以在打字稿的对象中使用泛型?
- python - 在 NASNetMobile 中合并或连接模型