具有默认值的Javascript数组(相当于Python的defaultdict)?

Par*_*and 14 javascript python

可能重复:
在读取之前设置未定义的javascript属性

在Javascript中是否有相当于Python的defaultdict?这将是一个Javascript数组,其中为缺少的键返回的值是可定义的.就像是:

var a = defaultArray("0");
console.log(a['dog']);
// would print 0
Run Code Online (Sandbox Code Playgroud)

如果没有,你会如何实现它?

Ber*_*rgi 3

不,这在 JavaScript 中是不可能的。顺便说一句,您当然指的是对象(属性值映射)而不是数组。两种解决方案:

  • 将您的对象实现为 a Proxy,它旨在完全执行您想要的操作。然而,它只是一个草案,目前仅在 Firefox 的 Javascript 1.8.5 中受支持

  • 使用带有字符串参数的 getter 函数而不是对象属性。该函数可以在内部“字典”对象中查找输入键,并以编程方式处理未命中的情况 - 例如动态创建值或返回默认值。

    当然,您可以为此类 getter 函数构建一个工厂。

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
Run Code Online (Sandbox Code Playgroud)