如何从地图返回数组?

时间:2016-12-06 17:00:23

标签: javascript ecmascript-6

我想从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)

我可以用地图做类似的事情吗?

1 个答案:

答案 0 :(得分:1)

是的! Map是可迭代的,你可以轻松地解构迭代:

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模式,但我不确定最佳方式。使用Array.fromslice的{​​{3}}肯定会有效,但大地图可能会很慢。