2012-10-25 11 views
14

可能性の重複:
Set undefined javascript property before readデフォルト値を持つJavascript配列(Pythonのdefaultdictに相当)?

JavaScriptでPython's defaultdictの同等はありますか?これは、欠けているキーのために返される値が定義可能なJavascript配列になります。次のようなもの:

var a = defaultArray("0"); 
console.log(a['dog']); 
// would print 0 

もしそうでない場合は、それをどのように実装しますか?

+0

http://stackoverflow.com/questions/812961/javascript-getters-and-setters-for-dummies – goat

+0

Bergiやランボー、おかげで、私はどちらかとは思いませんそれらの私が探しているものを行う。私はa.get( 'dog')を実装するつもりはない - デフォルト値を返すために['dog']を探している。そのようにして、配列を使用するコードは、それを通常の配列として扱うことができます。 – Parand

答えて

3

いいえ、これはJavaScriptでは不可能です。 Btw、あなたは確かに配列の代わりにオブジェクト(プロパティ - 値 - マップ)を意味した。二つの解決策:

  • は正確にあなたがやりたいように設計されてProxyとして、あなたのオブジェクトを実装します。それでも、それはドラフトだけで、現在はsupported in Firefox' Javascript 1.8.5です。

  • オブジェクトプロパティではなく文字列パラメータでゲッター関数を使用します。この関数は、内部「辞書」オブジェクトの入力キーを検索し、プログラムでミスを処理できます。動的に値を作成するか、デフォルト値を返す。

    もちろん、このようなゲッター関数のファクトリを構築することができます。

function defaultDict(map, default) { 
    return function(key) { 
     if (key in map) 
      return map[key]; 
     if (typeof default == "function") 
      return default(key); 
     return default; 
    }; 
} 

var a = defaultDict({cat: 1}, 0); 
console.log(a('cat')); // 1 
console.log(a('dog')); // 0 
+0

ありがとうBergi。それはあまりにも悪いです、私は本当に同等のものがあることを望んでいました。 – Parand

+0

新しい値を追加するコードに拡張機能を追加すると、collections.defaultdict pyと同じ機能が実現します。 – Luchux

+1

@ luchuxが[pycollections.js](http://github.com/seriesoftubes/pycollections.js)で話していることをしました。 –

関連する問題