当前位置: 首页 > 面试题库 >

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

曾飞雨
2023-03-14
问题内容

Javascript中是否有Python的defaultdict的等效项?这将是一个Javascript数组,其中可为缺少的键返回的值是可定义的。就像是:

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

如果没有,您将如何实施?


问题答案:

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

  • 将您的对象实现为Proxy,旨在完全实现您想要的功能。但是,它只是一个草稿,目前仅在Firefox的Javascript 1.8.5中受支持。

  • 使用带有字符串参数而不是对象属性的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


 类似资料:
  • 我试图添加一个带有默认值的请求参数,但是我希望默认值是登录的用户名。 我有一个方法getUsername(),它返回当前用户的名称,但我不能将注释的值设置为方法调用(或类属性)。这是我的方法: 我可以使RequestParam不是必需的,并在为null时填充它——但这感觉不是很优雅(或者说是spring风格)。还有其他方法可以做到这一点吗?

  • 我试图理解下面的代码片段 当使用指针类型示例int*调用时,默认参数是如何工作的? 当obj1.test()被调用时,编译器将生成什么。我得到一个编译器错误当我尝试

  • JOOQ似乎完全忽略了数据库列的默认值。既不会更新ActiveRecord对象,也不会在插入时跳过此列。相反,它尝试将其设置为NULL,这在非NULL列上失败。 例: 我所期望的行为是,要么new记录()用korrekt值初始化所有默认变量(尽管我知道如果结果是自定义函数的结果,这可能很困难:-))。或者INSERT INTO不插入所有带有默认值的未修改列,然后INSERT INTO后面跟着一个S

  • 问题内容: 这个问题已经在这里有了答案 : 有没有办法将默认参数设置为等于另一个参数值? (4个答案) 5年前关闭。 是否可以在同一函数定义中将函数参数的默认值定义为另一个参数?就像是: 但这没用。 问题答案: 不可以。Python解释器认为要说法的默认值分配到一个全局变量时,没有一个全局变量。 您可能想要尝试这样的事情:

  • 问题内容: 我正在寻找将列添加到默认值为0的MySQL数据库的语法 参考 问题答案: 尝试这个: 从链接到的文档中: 要在页面下方查找搜索语法,请执行以下操作: column_definition子句对ADD和CHANGE使用与CREATE TABLE相同的语法。请参见第12.1.17节“创建表语法”。 并从链接页面: 注意那里的DEFAULT这个词。

  • 问题内容: 我希望JavaScript函数具有我设置了默认值的可选参数,如果未定义值,则使用该参数(如果传递值,则将其忽略)。在Ruby中,您可以这样操作: 这在JavaScript中有效吗? 问题答案: 从ES6 / ES2015开始,默认参数在语言规范中。 正常工作。 如果 未 传递 任何值 或 未定义, 则默认函数参数允许使用默认值初始化形式参数。 您还可以通过解构来模拟默认的命名参数: 预