immutable.js从map / hash获取密钥

时间:2016-02-25 09:33:25

标签: immutable.js

我想从以下不可变地图中检索keys():

var map = Immutable.fromJS({"firstKey": null, "secondKey": null });
console.log(JSON.stringify(map.keys()));

我希望输出:

["firstKey", "secondKey"]

但是这会输出:

{"_type":0,"_stack":{"node":{"ownerID":{},"entries":[["firstKey",null],["secondKey",null]]},"index":0}}

怎么做得好?

JSFiddle链接:https://jsfiddle.net/o04btr3j/57/

4 个答案:

答案 0 :(得分:31)

这就是ImmutableJS对象的样子。

如果你想获得:

["firstKey", "secondKey"]

你需要这样做:

console.log(map.keySeq().toArray())

答案 1 :(得分:31)

虽然这个问题在不久前得到了回答,但这里有一点点更新:

ES6解决方案:

const [ ...keys ] = map.keys();

Pre ES6解决方案:

var keys = map.keySeq().toArray();

答案 2 :(得分:1)

可能只是回答了我自己的问题,导致我进入这里,但是我发现mapKeys()可以让您以常规循环访问密钥。似乎有点“正确的方法”。 (文档太模糊了,谁知道!)

例如:

Map({ a: 1, b: 2 }).mapKeys((key, value) => console.log(key, value))
// a 1
// b 2

答案 3 :(得分:0)

Immutable.js的最佳实践是使用不可变数据结构,并最大程度地减少对JavaScript类型的转换。对于此问题,我们可以使用keySeq(),它返回此Map的键的新class LoginPage extends React.Component { onClickLogin = () => { console.log(this.props.user.state) console.log(typeof this.props.user.saveUser) } render() { <button onClick={this.onClickLogin}>Login</button> } } export default props => <UserContext.Consumer> {user => <LoginPage user={user} {...props} />} </UserContext.Consumer> (值的有序索引列表)。然后,我们可以为这些值设置List并将该List分配给变量以供以后使用。这是如何实现此解决方案的示例:

Max Column C Value Per Column B ID:=
VAR CntRowsWeDontNeed =
    COUNTROWS (
        FILTER (
            'Table',
            'Table'[column c] > EARLIER ( 'Table'[column c] )
                && Table[column b] = EARLIER ( 'Table'[column b] )
                && Table[column a] > EARLIER ( Table[column a] )
        )
    )
RETURN
    IF ( ISBLANK ( CntRowsWeDontNeed ), Table[column a] )