什么是Python的字典get方法的Javascript等价物

时间:2017-05-25 15:54:56

标签: javascript

Python的词典get方法允许我指定在键不存在时应该返回的内容。对于我目前的情况,我想要一个字典返回。我如何在Javascript中执行此操作?

5 个答案:

答案 0 :(得分:2)

JavaScript没有帮助功能。您需要明确测试。

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

您可以使用三元运算符以较少的代码执行相同的操作。

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

答案 1 :(得分:2)

没有javascript相当于python字典的get方法。如果您自己编写,作为一个函数,它将如下所示:

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

使用它像:

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

请注意,所请求的密钥也将在obj。

的原型中找到

如果你真的想要一个方法而不是一个函数(obj.get("a", 2)),你需要扩展Object的原型。这通常被认为是一个坏主意,请参阅Extending Object.prototype JavaScript

答案 2 :(得分: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

代理是一个通过处理程序反映所有更改和请求的对象。在这种情况下,我们可以正常编写/访问字典的属性,但如果我们访问不存在的值,它将返回“默认”

答案 3 :(得分:1)

我更喜欢这样使用逻辑或:

foo.bar || 'default'

如果checks是foo.bar是错误的,因此如果bar未定义,它将返回“默认”。

您只需要关心foo是一个对象。否则会引发ReferenceError。

答案 4 :(得分:0)

这对我有用

let obj = {"a": 1};
let default = 100
obj["a"] || default; // -> 1
obj["b"] || default; // -> 100

但是!有一些限制,如果 !!obj["a"] === false 我们总是得到默认值......所以最好只检查 obj 中的键,以完全确定。