javascript - 如何轻松验证深层嵌套对象属性是否存在?

标签 javascript

在代码中的许多地方,我执行以下操作来访问深层嵌套属性:

if (a && a.b && a.b.c && a.b.c.d) {
    //do something with a.b.c.d
}

鉴于 a、b、c 和 d 具有更复杂的名称,这很丑陋、耗时,并且容易发生错误。

有没有一种“糖衣”的方法来处理这个问题?像这样:

if (valid(a.b.c.d)) {
    //do something with a.b.c.d
}

最佳答案

您可以使用递归辅助函数来执行此操作,例如:

function valid(obj, chain) {
    if (!chain.length) {
        return true;
    }
    var prop = chain.shift();
    return !obj.hasOwnProperty(prop) ? false : valid(obj[prop], chain);
}

var a = { b: { c: { d: 1 } } };

console.log(valid(a, ['b', 'c', 'd'])); // true
console.log(valid(a, ['b', 'c', 'e'])); // false

关于javascript - 如何轻松验证深层嵌套对象属性是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34991922/

相关文章:

javascript - 将 Ruby 正则表达式翻译成 JavaScript

javascript - 剑道网格读取 Action 触发?

javascript - 如何防止内容在 ionic 框架中滚动到页脚后面

javascript - 在渲染器中加载组合框字段的存储时出现问题

javascript - 模拟 requireJS 的内部依赖

javascript - JSON 对象根据位置返回值

对象上的 JavaScript 方法不更新属性

javascript - 如何创建淡入链接?延迟链接

javascript - 如何使用 javascript 链接多个任务?

javascript - Apollo 客户端写入查询不更新 UI