【问题标题】:Javascript's syntactic sugar for accessing object properties用于访问对象属性的 Javascript 语法糖
【发布时间】:2016-03-22 21:44:47
【问题描述】:

我有一个“结果”对象,我想汇集这些嵌套属性的值。

有没有一种优雅的方式来分配这两个属性的值如果它们存在,否则抛出错误?我发现自己写了一些很长的代码来做这样一个简单的操作。

谢谢

host: result["ServerCA"]["_"],
database: result["DBId"]["_"]

EDIT1 - 更多信息

我的代码构造了一个具有hostdatabase 两个属性的对象。 result 对象是一个包含一些信息的 JSON。 我不能保证 JSON 实际上会包含ServerCA 下的_DBId 下的_ 这两个属性。事实上,我不能确定ServerCADBId 是否会在result 对象中定义。

所以我试图验证这些属性是否存在,并将它们的值分配给我自己对象的两个属性hostdatabase

我怎样才能用最简单的方式来写这个而不是写两个双 IF 语句?

谢谢...

【问题讨论】:

  • 您可以使用像result.ServerCA._ 这样的点约定,但我怀疑它是否会变得更简单。
  • 也许你添加一个示例对象
  • 我不清楚你在问什么。您当前的代码不是已经按照您的要求执行了吗?
  • 实际上可能没有定义什么? result.ServerCA?还是result.ServerCA._?或host?在您当前的代码中,如果 result.ServerCA 不存在,尝试读取 result.ServerCA._ 的值将引发错误。
  • Teemu 没有任何东西可以保证被定义。我已经编辑了我的问题,现在它有更多信息。对不起

标签: javascript object if-statement properties


【解决方案1】:

您可以编写一个辅助函数来执行此操作,例如:

function getOrThrow(obj, keys) {
    return keys.reduce(function(result, key) {
        if (!(typeof result === 'object') || !(key in result)) {
            throw new Error("property " + key + " does not exists");
        }
        return result[key];
    }, obj);
}

var result = {
    ServerCA: {
        _: "whatever"
    }
};

console.log(getOrThrow(result, ["ServerCA", "_"])); // whatever
console.log(getOrThrow(result, ["ServerCA", "_", "other"])); // throws error

【讨论】:

    猜你喜欢
    • 2018-09-13
    • 2012-05-22
    • 1970-01-01
    • 2011-04-25
    • 2021-11-06
    • 2023-03-31
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多