我正在try 使用Javascript EC6中的新Map对象,因为最新的Firefox和Chrome版本已经支持它.

但我发现它在"函数式"编程方面非常有限,因为它缺乏classic 的 map 、过滤等方法,这些方法可以很好地与[key, value]对一起使用.它有一个forEach,但不返回回调结果.

如果我可以将它的map.entries()从MapIterator转换成一个简单的Array,那么我就可以使用标准的.map,.filter,而不需要额外的修改.

有没有一种将Javascript迭代器转换为Array的"好"方法? 在Python 里就像做list(iterator).但是Array(m.entries())返回一个以迭代器为第一个元素的数组!

EDIT

我忘了指定我在寻找一个在Map工作的地方都能工作的答案,这意味着至少Chrome和Firefox(Array.from在Chrome中不工作).

PS.

我知道有神奇的wu.js,但它对traceur的依赖让我很反感...

推荐答案

您正在寻找将任意ITerable转换为数组实例的新Array.from function:

var arr = Array.from(map.entries());

现在是supported in Edge, FF, Chrome and Node 4+.

当然,直接在迭代器接口上定义mapfilter和类似的方法可能是值得的,这样可以避免分配array.您可能还希望使用生成器函数而不是高阶函数:

function* map(iterable) {
    var i = 0;
    for (var item of iterable)
        yield yourTransformation(item, i++);
}
function* filter(iterable) {
    var i = 0;
    for (var item of iterable)
        if (yourPredicate(item, i++))
             yield item;
}

Javascript相关问答推荐

无法在page. evalve()内部使用外部函数

为什么子组件没有在reaction中渲染?

Angular material 表多个标题行映射

如何指定1条记录1个表?

使用JavaScript重命名对象数组中的键

如何使用React渲染器放置根dis?

了解Node.js中的EventEums和浏览器中的addEventEums之间的关系

useNavigation更改URL,但不呈现或显示组件

React Code不在装载上渲染数据,但在渲染上工作

如何修复(或忽略)HTML模板中的TypeScript错误?'

WebRTC关闭navigator. getUserMedia正确

根据一个条件,如何从处理过的数组中移除一项并将其移动到另一个数组?

<;img>;标记无法呈现图像

无法避免UV:flat的插值:非法使用保留字"

如何在脚本编译后直接将RxJ模块导入浏览器(无需Angel、webpack、LiteServer)

通过解构/功能组件接收props-prop验证中缺少错误"

我的NavLink活动类在REACT-ROUTER-V6中出现问题

为什么当雪碧的S在另一个函数中时,Phaser不能加载它?

重新渲染过多(&Q).REACT限制渲染次数以防止无限循环.使用REACT下拉菜单时

将字符串解释为数字;将其重新编码为另一个基数