首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Node.js:比较可能不存在的嵌套对象属性

Node.js:比较可能不存在的嵌套对象属性
EN

Stack Overflow用户
提问于 2018-09-13 19:13:42
回答 2查看 252关注 0票数 1

我的问题

考虑对对象的嵌套属性进行比较:

代码语言:javascript
运行
复制
display.entities.listAfter.text === 'blah';

如果嵌套查找中的某个属性不存在,我们将得到一个类型错误,例如:

代码语言:javascript
运行
复制
TypeError: Cannot read property 'listAfter' of undefined

我试过什么

试着接住。工作,但不太优雅,我想知道是否有更好的方法。

我的私服

除了尝试和捕捉之外,是否有一种规范的方法在进行比较之前检查嵌套属性是否存在?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-13 19:20:40

我不知道规范,但我有时会这样做:

代码语言:javascript
运行
复制
display.entities &&
display.entities.listAfter &&
display.entities.listAfter.text === 'blah'

当然,这很快就会变得笨重起来。如果你真的想让它看起来好看,那就去找房客吧!

https://lodash.com/docs/4.17.10#get

您可以提供.get函数的路径,如果找不到它,甚至可以指定默认路径。

代码语言:javascript
运行
复制
_.get(display, 'entities.listAfter.text') === 'blah'
票数 1
EN

Stack Overflow用户

发布于 2018-09-13 21:30:01

对于具有智能默认值的嵌套属性,我喜欢使用简单的函数getter,如下所示:

代码语言:javascript
运行
复制
const getValue = (obj = {}, path = []) => {
  return path.reduce((xs, x) => (xs && xs[x]) ? xs[x] : undefined, obj);
};

const display = {
  "entities": {
    "listAfter": {
      "text": 1
    }
  }
};
console.log(getValue(display, ['entities', 'listAfter', 'text']));
console.log(getValue(display, ['entities', 'listAfter', 'foo']));
console.log(getValue(display, ['entities', 'listAfter']));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52320363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档