2017-05-25 9 views
1

辞書のPythonのgetメソッドを使用すると、キーが存在しない場合に返される内容を指定できます。私の現在のケースでは、辞書を返すようにしたい。 Javascriptでこれを行うにはどうすればいいですか?辞書のPythonのgetメソッドのJavascriptに相当するもの

+1

dict ['key'] ||デフォルト – ag0rex

+0

jsにゲッターとセッターもあります。 –

+1

[javascriptオブジェクト属性のデフォルト値を設定]の可能な複製(https://stackoverflow.com/questions/6600868/set-default-value-of-javascript-object) -attributes) – JJJ

答えて

2

JavaScriptにはそのようなヘルパー機能はありません。明示的にテストする必要があります。

if ("myProperty" in myObject) { 
    return { another: "object" }; 
} else { 
    return myObject.myProperty; 
} 

3項演算子を使用すると、少ないコードで同じことを行うことができます。

return ("myProperty" in myObject) ? myObject.myProperty : { another: "object" }; 
+0

これもプロトタイプをチェックしますか? – evolutionxbox

+0

@evolutionxbox - はい。 (プロトタイプから継承したプロパティを除外したい場合は 'hasOwnProperty()'を使うことができます)。 – Quentin

+0

@evolutionxbox https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in ... –

1

あなたは、このためのプロキシ(本当に新しい)を使用することができます

var handler = { 
    get: function(target, name){ 
     return name in target? 
     target[name] : 
     "Default"; 
    } 
}; 
var dictionary={"hi":true}; 
var dict = new Proxy(dictionary, handler); 
dict.a = 1; 
dict.b = undefined; 

console.log(dict.a, dict.b,dict.hi); // 1, undefined,true 
console.log(dict.new); //"Default" 

//the proxied object gets changed: 

console.log(dictionary.a, dictionary.b,dictionary.hi); // 1, undefined,true 
console.log(dictionary.new); //undefined 

プロキシは、すべての変更と要求ハンドラトラフを反映しているオブジェクトです。この場合、辞書のpropertysには通常どおりアクセスできますが、存在しない値にアクセスすると "Default"が返されます。

+0

私は好奇心が強い人達のために:[MDN Documentation on proxy](https:///developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy)。 –

1

python dictionary getメソッドのjavascriptに相当するものはありません。あなたはそれを自分で書きたい場合は、関数と、それは次のようになります。要求されたキーはまた、OBJのプロトタイプで発見されること

var obj = {"a": 1}; 
get(obj, "a", 2); // -> 1 
get(obj, "b", 2); // -> 2 

注:

function get(object, key, default_value) { 
    var result = object[key]; 
    return (typeof result !== "undefined") ? result : default_value; 
} 

は次のようにそれを使用してください。

実際に関数(obj.get("a", 2))ではなくメソッドが必要な場合は、Objectのプロトタイプを拡張する必要があります。しかし、これは一般的には悪い考えです。Extending Object.prototype JavaScript

関連する問題