2016-12-06 69 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肯定会工作,虽然它可能会与大地图缓慢。