2017-10-11 74 views
1

我正在使用映射函數來瀏覽幻燈片數據,我只想返回前5個。然而,幻燈片在返回前5張幻燈片,然後2個空幻燈片對象(因爲有7張幻燈片。如何防止最後兩個無法返回?JS地圖返回問題

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

這正常工作,但是我得到一個錯誤的棉絨說Expected to return a value at the end of arrow function array-callback-return什麼是這樣做的標準方式嗎?

+0

你期望'幻燈片'在第二種情況下包含什麼? –

回答

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

一般情況下,要使用filtermap的一個操作,即會(潛在)返回數組的一個子集。

map總是返回相同長度的數組,每個項目根據給予map的函數進行轉換。

filter返回一個已過濾的數組,其中只包含給予filter的函數返回真值的項目。

所以你的情況:

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

然而,對於這個特殊的例子,這種情況因爲你想基於位置的陣列的一個子集就更簡單了。使用slice是你需要的:

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