Как получить отсортированный массив имен из массива объектов по условию с помощью filter map sort

Рейтинг: -1Ответов: 2Опубликовано: 30.01.2023

Дополни код так, чтобы в переменной names получился массив имён авторов в алфавитном порядке, рейтинг книг которых больше значения переменной MIN_BOOK_RATING.

const books = [
  {
    title: "The Last Kingdom",
    author: "Bernard Cornwell",
    rating: 8.38,
  },
  {
    title: "Beside Still Waters",
    author: "Robert Sheckley",
    rating: 8.51,
  },
  {
    title: "The Dream of a Ridiculous Man",
    author: "Fyodor Dostoevsky",
    rating: 7.75,
  },
  { title: "Redder Than Blood", author: "Tanith Lee", rating: 7.94 },
  {
    title: "The Dreams in the Witch House",
    author: "Howard Lovecraft",
    rating: 8.67,
  },
];
const MIN_BOOK_RATING = 8;
// Change code below this line

const names = books
  .filter((rating, index, array) => array.indexOf(rating) > MIN_BOOK_RATING)
  .map(rating => rating.author)
  .sort((a, b) => a.localeCompare(b));
  
console.log(names)

Помогите, не могу разобраться.

Ответы

▲ 1Принят

У вас ошибка в методе filter. Отфильтровывать данные надо по каждому итерируему объекту в массиве, сравнивая текущее значение rating с MIN_BOOK_RATING

const books = [
  {
    title: "The Last Kingdom",
    author: "Bernard Cornwell",
    rating: 8.38,
  },
  {
    title: "Beside Still Waters",
    author: "Robert Sheckley",
    rating: 8.51,
  },
  {
    title: "The Dream of a Ridiculous Man",
    author: "Fyodor Dostoevsky",
    rating: 7.75,
  },
  { title: "Redder Than Blood", author: "Tanith Lee", rating: 7.94 },
  {
    title: "The Dreams in the Witch House",
    author: "Howard Lovecraft",
    rating: 8.67,
  },
];
const MIN_BOOK_RATING = 8;
// Change code below this line

const names = books
  .filter(rating => rating.rating > MIN_BOOK_RATING)
  .map(rating => rating.author)
  .sort((a, b) => a.localeCompare(b));

console.log(names);

▲ 0

Вы сделали почти верно, немного только ошиблись в фильтрации книг. И для такой сортировки необязательно передавать сортер, массивы так сортируются по умолчанию.

const books = [{
    title: "The Last Kingdom",
    author: "Bernard Cornwell",
    rating: 8.38,
  },
  {
    title: "Beside Still Waters",
    author: "Robert Sheckley",
    rating: 8.51,
  },
  {
    title: "The Dream of a Ridiculous Man",
    author: "Fyodor Dostoevsky",
    rating: 7.75,
  },
  {
    title: "Redder Than Blood",
    author: "Tanith Lee",
    rating: 7.94
  },
  {
    title: "The Dreams in the Witch House",
    author: "Howard Lovecraft",
    rating: 8.67,
  },
];
const MIN_BOOK_RATING = 8;
// Change code below this line

const names = books
  .filter((book) => book.rating > MIN_BOOK_RATING)
  .map(rating => rating.author)
  .sort();

console.log(names)