2016-12-06 72 views
0

我想從javascript-map中返回0,1或2個圖像,具體取決於有多少圖像。如何從地圖返回數組?

function images() { 
    if (item.has('images')) { 
     const response = [item.get('images').get(0)] 
     if(item.get('images').has(100)){ 
     response.push(item.get('images').get(1)) 
     } 
     return response 
    } else { 
     return [] 
    } 
    } 

這就是我目前的做法。如果我有一組圖像,我可以簡單地做

return arr.slice(0,2) 

我可以做一些類似的地圖嗎?

+4

'Array.from(map.values())。slice(0,2)'? –

+0

什麼將map.values()在我的例子? – Himmators

+1

可能是'Array.from(item.get('images')。values())。slice(0,2)''。 –

回答

1

是的! Map s爲迭代,你可以輕鬆地解構iterables:

const m = new Map([['a', 1], ['b', 2], ['c', 3]]); 
const [head, next] = m.values(); 
console.log(head, next); 

具體來說,我認爲Map.prototype.values方法會幫助你。它從地圖返回一個可迭代(儘管不一定是數組)值。

再加上邏輯一點點:

function images (m) { 
    if (m.has('images')) { 
    const data = m.get('images'), values = data.values(); 
    if (data.size < 100) { 
     const [head] = values; 
     return [head]; 
    } else { 
     const [head, next] = values; 
     return [head, next]; 
    } 
    } else { 
    return []; 
    } 
} 

您可以清理重複[foo, bar] = baz模式,雖然我不知道的最好方式。 Felix Kling's commentArray.fromslice肯定會工作,雖然它可能會與大地圖緩慢。