你会怎么做?
var myMap = new Map([["thing1", 1], ["thing2", 2], ["thing3", 3]]);
// wishful, ignorant thinking
var newMap = myMap.map((key, value) => value + 1); // Map { 'thing1' => 2, 'thing2' => 3, 'thing3' => 4 }
我还没有从新迭代协议的文档。
我知道吴.js,但我正在运行巴别塔项目并且不想包括特雷乌尔, 哪个目前看来这取决于。
我也有点不知道如何提取fitzgen/wu.js 是如何做到的进入我自己的项目。
希望对我在这里缺少的内容有一个清晰、简洁的解释。
ES6 地图文档, 供参考
答案
所以.map
它本身只提供您关心的一个值…也就是说,有几种方法可以解决这个问题:
// instantiation
const myMap = new Map([
[ "A", 1 ],
[ "B", 2 ]
]);
// what's built into Map for you
myMap.forEach( (val, key) => console.log(key, val) ); // "A 1", "B 2"
// what Array can do for you
Array.from( myMap ).map(([key, value]) => ({ key, value })); // [{key:"A", value: 1}, ... ]
// less awesome iteration
let entries = myMap.entries( );
for (let entry of entries) {
console.log(entry);
}
请注意,我在第二个示例中使用了很多新东西……Array.from
接受任何可迭代的(任何时候你使用[].slice.call( )
,加上 Sets 和 Maps)并将其转换为数组… …Maps,当强制转换为数组时,转换为数组的数组,其中el[0] === key && el[1] === value;
(基本上,在相同的格式,我已经预装好的示例图,上图)。
我在 lambda 的参数位置使用数组的解构,在为每个 el 返回一个对象之前将这些数组点分配给值。
如果您在生产中使用 Babel,则需要使用 Babel 的浏览器 polyfill(其中包括"core-js"和 Facebook 的"regenerator")。
我很确定它包含Array.from
。