Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有默认值的Javascript数组(相当于Python的defaultdict)?_Javascript_Python - Fatal编程技术网

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

具有默认值的Javascript数组(相当于Python的defaultdict)?,javascript,python,Javascript,Python,可能重复: Javascript中是否有一个等价的?这将是一个Javascript数组,其中为缺少的键返回的值是可定义的。比如: var a = defaultArray("0"); console.log(a['dog']); // would print 0 如果没有,您将如何实现它?不,这在JavaScript中是不可能的。顺便说一句,您当然是指对象(属性值映射)而不是数组。两种解决方案: 将您的对象实现为一个,它的设计目的正是为了实现您想要的。然而,这只是一个草案,目前只是一个例子

可能重复:

Javascript中是否有一个等价的?这将是一个Javascript数组,其中为缺少的键返回的值是可定义的。比如:

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

如果没有,您将如何实现它?

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

  • 将您的对象实现为一个,它的设计目的正是为了实现您想要的。然而,这只是一个草案,目前只是一个例子

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

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


贝基和兰博,谢谢,但我认为这两个都不能满足我的要求。我不想实现一个.get('dog')——我想用一个['dog']来返回一些默认值。这样,使用数组的代码就可以将其视为常规数组。谢谢Bergi。这太糟糕了,我真的希望有一个等价物。通过在代码中添加一些扩展来添加新值,您将拥有与collections.defaultdict py相同的功能。我做了@Luchux在中所说的。
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