次の不変マップから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/
この質問は少し前に回答されましたが、ここに少し更新があります。
ES6ソリューション:
const [ ...keys ] = map.keys();
ES6以前のソリューション:
var keys = map.keySeq().toArray();
これがImmutableJSオブジェクトの外観です。
取得したい場合:
["firstKey", "secondKey"]
あなたがする必要があります:
console.log(map.keySeq().toArray())
おそらく私をここに導く私自身の質問に答えているだけなのですが、mapKeys()
を見つけたので、通常のループでキーにアクセスできます。もう少し「正しい方法」のようです。 (ドキュメントは非常に曖昧です、誰もが知っています!)
例えば:
Map({ a: 1, b: 2 }).mapKeys((key, value) => console.log(key, value))
// a 1
// b 2
Immutable.jsのベストプラクティスは、不変データ構造を使用し、JavaScript型への変換を最小限にすることです。この問題には、 keySeq() を使用できます。これは、新しいSeq.Indexed
(キーの順序付けられたインデックス付きリスト) Map 。次に、これらの値に List を設定し、後で使用するためにそのリストを変数に割り当てることができます。このソリューションを実装する方法の例を次に示します。
import { Map, List } from 'immutable';
const exampleMap = Map({ a: 10, b: 20, c: 30 });
const keys = List(exampleMap.keySeq()); // List [ "a", "b", "c" ]