我想从以下不可变地图中检索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/
答案 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] )