用于在ES6中的Map中存储值的回调函数

时间:2018-02-19 21:13:56

标签: javascript reactjs ecmascript-6 maps

之前可能已经提出过这个问题,但在充分搜索之后我找不到答案。

我正在研究React应用程序,我需要将状态存储在本地变量中。

以下是我的代码,它接受组件状态并将其存储在blockMap中:

let blockMap = this.state.editorState.getCurrentContent().getBlockMap();

然后我宣布一张新地图:

let tempMap = new Map();

现在,我需要将值存储到tempMap中。所以我做了这样的事情:

blockMap.forEach((k,v) => tempMap.set(k,v));

然后我打印出tempMap来查看设置变量。不幸的是,我再次得到一张空地图。我只是不明白为什么会这样。有人可以向我解释一下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更改地图状态,如下所示:

blockMap.forEach(k => {
    if(k.getText().replace(/^\s+|\s+$/g, '') !== undefined) {
        this.setState({
            map: map.set(k.getText(), k.getDepth())
        });
    }
});

令人惊讶的是这很有效。我无法理解这种异常行为。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

forEach回调的参数采用(value, key)而非(key, value)的形式,因此您的forEach应该是

blockMap.forEach((v,k) => tempMap.set(k,v));
                  ^^^ swapped

但实际上你并不需要forEach,因为Map可以在构造函数中使用另一个地图:

let tempMap = new Map(blockMap);