【问题标题】:Javascript object properties - create property if not existJavascript 对象属性 - 如果不存在则创建属性
【发布时间】:2015-12-22 15:22:09
【问题描述】:

我正在尝试以最优雅的方式执行这段代码:

if (internalTableName in self.columnMap &&
    internalColumnName in self.columnMap[internalTableName]) {
    console.error('dupelicates');
}
else {
    try {
        self.columnMap[internalTableName][internalColumnName] = logicalColumnName;
    } catch (err) {
        self.columnMap[internalTableName] = {};
        self.columnMap[internalTableName][internalColumnName] = logicalColumnName;
    }
}

我可以将 try/catch 块转换为:

if (internalTableName in self.columnMap &&
    internalColumnName in self.columnMap[internalTableName]) {
    console.error('dupelicates');
}
else {
    if (internalTableName in self.columnMap) {
        self.columnMap[internalTableName][internalColumnName] = logicalColumnName;
    }
    else {
        self.columnMap[internalTableName] = {};
        self.columnMap[internalTableName][internalColumnName] = logicalColumnName;

    }
}

我想知道 Javascript 是否提供了一些用于检查无效性的运算符,这可以使这个逻辑以更优雅的方式编写并减少 IF 子句。

谢谢

【问题讨论】:

  • @torazaburo 我不认为这是一个骗局,因为这个问题是关于设置而不是获取深度属性。并且它需要一个已经存在的属性的特殊情况。

标签: javascript if-statement null try-catch


【解决方案1】:

常见的模式是使用|| operator:

self.columnMap[internalTableName] = self.columnMap[internalTableName] || {};
self.columnMap[internalTableName][internalColumnName] = logicalColumnName;

【讨论】:

    【解决方案2】:

    我认为你正在寻找的是

    if (!(internalTableName in self.columnMap))
        self.columnMap[internalTableName] = {};
    if (!(internalColumnName in self.columnMap[internalTableName]))
        self.columnMap[internalTableName][internalColumnName] = logicalColumnName;
    else
        console.error('duplicates');
    

    您可以使用辅助变量并通过简单的虚假性检查空属性来缩短它:

    var table = self.columnMap[internalTableName] || (self.columnMap[internalTableName] = {});
    if (!table[internalColumnName])
        table[internalColumnName] = logicalColumnName;
    else
        console.error('duplicates');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多