2017-02-20 4 views
1

すべての不変なjsキーのために整数のキーを禁止する簡単な方法があり、それらにアクセスするときに整数を文字列に自動的に変換したいと思っています。 docsによるとすべてのImmutable.jsオブジェクトの整数キーを文字列に自動的に変換できますか?

var a = Immutable.Map({}) 
 
a = a.set("1", "string"); 
 
a = a.set(1, "integer"); 
 
console.log(a.size);  // 2 
 
console.log(a);   // {"1": "string", 1: integer}
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.min.js"></script>

+0

奇妙なことは、そのスニペットでいますが、コンソールで確認した場合に表示されない、エントリが2つのエントリを持ってい – Rajesh

+0

ええ、スニペットログが正しくありません –

答えて

0

JavaScriptにこれらの強力な機能概念をもたらすために設計されたが、それはJavascriptのエンジニアに馴染みのオブジェクト指向APIを提供し、密接にそれをミラーリング配列、マップ、およびセット

set[1]と["1"]を設定してください。しかし、文字列値のみを使用する場合は、文字列化されたバージョンのキーを追加するカスタムラッパーを作成することができます。続き

はサンプルです:

Immutable.Map.prototype.addMyEntry = function(key, value){ 
 
    return this.set(key.toString(), value); 
 
} 
 

 
var a = Immutable.Map({}) 
 
a = a.addMyEntry("1", "string"); 
 
a = a.addMyEntry(1, "integer"); 
 
console.log(a.size) 
 
console.log(a)
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.min.js"></script>

+0

それはありません( 'setIn'、' get'、 'getIn'も同様にラップする必要があります。おそらく、整数または文字列を渡すのに違いがある他の場所があります) –

+0

@LiubomyrMykhalchenkoはいthats trueしかし数値aと数値aとの間には差があります非数値キー。配列には数字のインデックスがあり、マップには数字以外のキーがあります。それを同じように扱いたいと思うあなたの特定の要件。そのような場合は、ラッパー関数を作成する必要があります。また、私の答えは、あなたがそれを達成する方法の単なるサンプルです。 – Rajesh

関連する問題