javascript - 在 ES6 中将值存储在 Map 中的回调函数

标签 javascript reactjs ecmascript-6 maps

这个问题以前可能有人问过,但我在充分搜索后找不到答案。

我正在开发 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/

相关文章:

javascript - setState 对象数组

javascript - 非箭头功能的单行缩写?

javascript - 嵌套订阅并需要所有值作为正文传递给 API - Angular 6 RxJS

javascript - 增加 Map.get() 的结果

javascript - 如何测试 transitionProperty(等)是否采用 vendor 前缀样式属性名称或规范化属性名称?

javascript - Jquery查找类、值并更改背景颜色

javascript - 如何通过 id 注册删除 dojo 小部件,但未在任何 DOM 节点中引用

javascript - navigator.getUserMedia 不适用于 Android/Chrome

javascript - 是否可以在 React Native 中使用 Animated 为 Modal 设置动画?

reactjs - 在 redux 存储中存储类实例