Я использую функцию отображения, чтобы проходить через данные слайда, и я хочу вернуть только первые 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
. Каков стандартный способ сделать это?
map
всегда возвращает массив с тем же количеством элементов, что и его входной массив.
Вместо этого рассмотрите использование filter
только для включения первых первых 5 элементов в отфильтрованный вывод:
slideData.slides.filter((slide, index) => {
if( index < 5 ) {
return true;
}
});
Или, если вам интересно найти определенный непрерывный пробег элементов, как и в этом случае, просто используйте slice(n, m)
чтобы получить элементы от n
до m-1
:
slideData.slice(0, 5)
В общем, вы хотите использовать 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
slides
во втором случае?