Карта возврата JS

1

Я использую функцию отображения, чтобы проходить через данные слайда, и я хочу вернуть только первые 5. Однако слайды возвращают первые 5 слайдов, а затем 2 пустых объекта слайдов (так как есть 7 слайдов. Как я могу предотвратить возвращение двух последних?

const slides = slideData.slides.map((slide, index) => {
  if( index < 5 ) {
    return slide;
  }
});
console.log(slides);

Кроме того, если я что-то вроде..

let firstFive = [];
const slides = slideData.slides.map((slide, index) => {
  if( index < 5 ) {
    firstFive.push(slide)
  }
});

Это работает правильно, однако я получаю ошибку lint, Expected to return a value at the end of arrow function array-callback-return что " Expected to return a value at the end of arrow function array-callback-return. Каков стандартный способ сделать это?

  • 0
    Что вы ожидаете slides во втором случае?
Теги:
ecmascript-6
loops

2 ответа

3

map всегда возвращает массив с тем же количеством элементов, что и его входной массив.

Вместо этого рассмотрите использование filter только для включения первых первых 5 элементов в отфильтрованный вывод:

slideData.slides.filter((slide, index) => {
  if( index < 5 ) {
    return true;
  }
});

Или, если вам интересно найти определенный непрерывный пробег элементов, как и в этом случае, просто используйте slice(n, m) чтобы получить элементы от n до m-1:

slideData.slice(0, 5)
3

В общем, вы хотите использовать filter не map для операции, которая (потенциально) возвращает подмножество массива.

map всегда возвращает тот же массив длины с каждым элементом, преобразованным на основе функции, заданной для map.

filter возвращает фильтрованный массив, который содержит только те элементы, для которых функция, заданная для filter возвращает истинное значение.

Итак, в вашем случае:

const slides = slideData.slides.filter((_, i) => i < 5));

Однако для этого конкретного примера ситуация еще проще, так как вы хотите подмножество массива на основе позиции. Использование slice - это то, что вам нужно:

const slides = slideData.slides.slice(0, 5); // extract first five items

Ещё вопросы

Сообщество Overcoder
Наверх
Меню