这个问题以前可能有人问过,但我在充分搜索后找不到答案。
我正在开发 React 应用程序,我需要将状态( map )存储在局部变量中。
以下是我的代码,它获取组件状态并将其存储在 blockMap 中:
let blockMap = this.state.editorState.getCurrentContent().getBlockMap();
然后我声明一个新的 map :
let tempMap = new Map();
现在,我需要将值存储到 tempMap 中。所以我做了这样的事情:
blockMap.forEach((k,v) => tempMap.set(k,v));
然后我只打印出 tempMap 以查看设置的变量。不幸的是,我又得到一张空 map 。我只是不明白为什么会这样。有人可以向我解释这是 ES6 问题还是其他问题吗?
完整功能如下:
printMapOfEditorState(){
let blockMap = this.state.editorState.getCurrentContent().getBlockMap();
let map = this.state.map;
let tempMap = new Map();
blockMap.forEach((k,v) => tempMap.set(k,v));
console.log(tempMap);
}
再跟进一次,在同一个函数中,我通过使用 setState 来更改 map 状态,如下所示:
blockMap.forEach(k => {
if(k.getText().replace(/^\s+|\s+$/g, '') !== undefined) {
this.setState({
map: map.set(k.getText(), k.getDepth())
});
}
});
而且令人惊讶的是这有效。我无法理解这种反常行为。感谢您的帮助。
最佳答案
forEach
回调的参数采用 (value, key)
的形式,而不是 (key, value)
,所以你的 forEach
应该看起来像
blockMap.forEach((v,k) => tempMap.set(k,v));
^^^ swapped
但实际上您不需要 forEach,因为 Map
可以在构造函数中采用另一个映射:
let tempMap = new Map(blockMap);
关于javascript - 在 ES6 中将值存储在 Map 中的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48874263/