迭代不可变的 JS 映射

Iterating over Immutable JS Map

考虑这段代码:

const map1 = Immutable.Map({a:1, b:2, c:3});

const myMap = map1.map((elem, index) => {
    return "Hello " + elem;
})

console.log(myMap.toJS());
// prnts {a: "Hello 1", b: "Hello 2", c: "Hello 3"}

我希望输出为 ['Hello1', 'Hello2, 'Hello3'],但是 map 也给了我一个带有键的对象。为什么我没有像正常 JavaScript map 那样得到一个数组作为输出?达到预期结果的最佳方法是什么? (我可以使用 forEach 而不是 map,并将每次迭代的结果推送到一个数组中,但我正在寻找更好的方法)。

只需使用myMap.keys即可获取数组

Array.from(myMap.keys());

相同的可运行代码片段如下:

const map1 = Immutable.Map({a:1, b:2, c:3});

const myMap = map1.map((elem, index) => {
    return "Hello " + elem;
})

console.log(Array.from(myMap.keys()));

使用 toArray() 而不是 toJS():

const map1 = Immutable.Map({a:1, b:2, c:3});

const myMap = map1.map((elem, index) => {
    return "Hello " + elem;
})

console.log(myMap.toArray());
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.js"></script>

只是使用 reduce

提供不同的风格

const map1 = Immutable.Map({a:1, b:2, c:3});

const myMap = map1.reduce((accumulator, value) => {
    accumulator.push("Hello" + value);
    return accumulator;
}, [])

console.log(myMap);
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.js"></script>