迭代不可变的 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>
考虑这段代码:
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>