首页 > 解决方案 > 如何在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())

标签: javascript

解决方案


好像你快到了。您只需要计算评级数组的总和,然后除以它的长度。这应该为您完成任务。

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());


推荐阅读