显示图书馆中最受欢迎书籍的5个或更少对象的返回数组.受欢迎程度由一本书的借阅量决定



我对Javascript还很陌生,所以我在这里尽了最大的努力,但我还没有成功地纠正我的函数以正常运行,如果你们能在这里帮助我,或者至少为我指明正确的方向,那就太好了!我正试图返回我的";图书馆";受欢迎程度取决于一本书的借阅次数,以下是我要使用的提示:

getMostPopularBooks()函数只有一个参数:

  • 一系列的书

它返回一个包含五个或更少对象的数组,该数组表示库中最受欢迎的书籍。受欢迎程度是指一本书被借的次数。

返回数组中的每个对象都有两个键:

  • 代表书名的name
  • count键,表示书籍被借阅的次数

如果存在五本以上的书,则只应返回前五本。

以下是提供的示例:

getMostPopularBooks(books);/*
[
{ name: "incididunt nostrud minim", count: 30 },
{ name: "culpa do sint", count: 30 },
{ name: "ullamco est minim", count: 29 },
...
]
*/

以下是提供的部分数据:

const books = [{
id: "5f447132d487bd81da01e25e",
title: "sit eiusmod occaecat eu magna",
genre: "Science",
authorId: 8,
borrows: [
{
id: "5f446f2e2cfa3e1d234679b9",
returned: false,
},
{
id: "5f446f2ed3609b719568a415",
returned: true,
},
{
id: "5f446f2e1c71888e2233621e",
returned: true,
},
{
id: "5f446f2e6059326d9feb9a68",
returned: true,
},
{
id: "5f446f2ede05a0b1e3394d8b",
returned: true,
},
{
id: "5f446f2e4081699cdc6a2735",
returned: true,
},
{
id: "5f446f2e3900dfec59489477",
returned: true,
},
{
id: "5f446f2e6059326d9feb9a68",
returned: true,
},
{
id: "5f446f2e409f8883af2955dd",
returned: true,
},
{
id: "5f446f2e3900dfec59489477",
returned: true,
},
{
id: "5f446f2eae901a82e0259947",
returned: true,
},
{
id: "5f446f2ef2ab5f5a9f60c4f2",
returned: true,
},
{
id: "5f446f2ea6b68cf6f85f6e28",
returned: true,
},
{
id: "5f446f2eed18105706d6ca19",
returned: true,
},
{
id: "5f446f2eae901a82e0259947",
returned: true,
},
{
id: "5f446f2e91c2af00cb74e82b",
returned: true,
},
{
id: "5f446f2e5aa2bb5545a0f8a6",
returned: true,
},
{
id: "5f446f2ea508b6a99c3e42c6",
returned: true,
},
{
id: "5f446f2e50cc2da9cd80efdb",
returned: true,
},
{
id: "5f446f2e0b3e2ff72fc503e7",
returned: true,
},
{
id: "5f446f2e91c2af00cb74e82b",
returned: true,
},
{
id: "5f446f2ef795e593cd3cd19d",
returned: true,
},
{
id: "5f446f2e2f35653fa80bf490",
returned: true,
},
{
id: "5f446f2e7b9cd304fed3a8bc",
returned: true,
},
{
id: "5f446f2ed9aac23c0340aab2",
returned: true,
},
],},{
id: "5f4471329627160be1e8ce92",
title: "esse ea veniam non occaecat",
genre: "Classics",
authorId: 10,
borrows: [
{
id: "5f446f2ed3609b719568a415",
returned: false,
},
{
id: "5f446f2ec32d71dabec35b06",
returned: true,
},
{
id: "5f446f2ef2ab5f5a9f60c4f2",
returned: true,
},
{
id: "5f446f2e7a1be21e362b82f9",
returned: true,
},
{
id: "5f446f2e6059326d9feb9a68",
returned: true,
},
{
id: "5f446f2ec32d71dabec35b06",
returned: true,
},
{
id: "5f446f2e59f9380a1d03d766",
returned: true,
},
{
id: "5f446f2e141b97d842b680fd",
returned: true,
},
{
id: "5f446f2e409f8883af2955dd",
returned: true,
},
{
id: "5f446f2ee176f80b8d5d24da",
returned: true,
},
{
id: "5f446f2ef795e593cd3cd19d",
returned: true,
},
{
id: "5f446f2eef419207c5fa4ec9",
returned: true,
},
{
id: "5f446f2e50cc2da9cd80efdb",
returned: true,
},
{
id: "5f446f2e4081699cdc6a2735",
returned: true,
},
],},{
id: "5f44713265e5d8d17789beb0",
title: "tempor occaecat fugiat",
genre: "Travel",
authorId: 16,
borrows: [
{
id: "5f446f2e4eff1030e7316861",
returned: true,
},
{
id: "5f446f2ecc5c4787c403f844",
returned: true,
},
{
id: "5f446f2ee1661e64cde14e55",
returned: true,
},
{
id: "5f446f2e50cc2da9cd80efdb",
returned: true,
},
{
id: "5f446f2ef795e593cd3cd19d",
returned: true,
},
{
id: "5f446f2eae901a82e0259947",
returned: true,
},
{
id: "5f446f2e3e70bb4e1ab821c9",
returned: true,
},
{
id: "5f446f2ef2ab5f5a9f60c4f2",
returned: true,
},
{
id: "5f446f2e136866e4fe60c893",
returned: true,
},
],}

以下是我迄今为止所尝试的:

function getMostPopularBooks(books) {
const bookPopularity = books.map((book) => book.title);
const temp = [];
bookPopularity.map((title) => {
const borrowLocation = temp.findIndex((element) => element.name === title);
if (borrowLocation >= 0) {
temp[borrowLocation].count = temp[borrowLocation].count + 1;
} else {
temp.push({ name: title, count: 1 });
}
});
temp.sort((alpha, delta) => delta.count - alpha.count);
if (temp.length > 5) {
return temp.slice(0, 5);
}
return temp;
}

这也是测试代码,以防你们想看它:

describe("getMostPopularBooks()", () => {
it("should return an ordered list of most popular books", () => {
const actual = getMostPopularBooks(books);
const [first, second] = [
{ name: "sit eiusmod occaecat eu magna", count: 11 },
{ name: "ullamco est minim", count: 5 },
];
expect(actual[0]).to.eql(first);
expect(actual[1]).to.eql(second);
});
it("should limit the list to the top five", () => {
const actual = getMostPopularBooks(books);
expect(actual.length).to.equal(5);
});
});

我知道我通过了第二次测试;将列表限制为前五个";但是我没有通过第一次测试;期望{Object(name,count(}深度等于{Object(name,count(}"再一次,如果你们能帮助我或为我指明正确的方向,那将是非常棒的。谢谢

您已经大大简化了这一点。。。

function getMostPopularBooks(books, count=5) {
// organise book data
const borrows = books.map(book=>({name:book.title, count:book.borrows.length}));
// sort by borrow count, descending
borrows.sort((a,b) => b.count - a.count);
// return top N
return borrows.slice(0,count);
}

最新更新