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

时间:2018-09-13 19:13:42

标签: node.js properties nested

我的问题

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

display.entities.listAfter.text === 'blah';

如果嵌套查找中的属性之一不存在,则会出现类型错误,例如:

TypeError: Cannot read property 'listAfter' of undefined

我尝试了什么

尝试并抓住。可行,但不是很优雅,我想知道是否有更好的方法。

我的哀求

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

2 个答案:

答案 0 :(得分:1)

我不了解规范,但是有时我会这样做:

display.entities &&
display.entities.listAfter &&
display.entities.listAfter.text === 'blah'

但是当然很快就会变得笨拙。如果您真的希望它看起来不错,请转到lodash!

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

您可以提供.get函数的路径,甚至可以在找不到默认值的情况下指定默认值

_.get(display, 'entities.listAfter.text') === 'blah'

答案 1 :(得分:0)

我喜欢对嵌套属性使用简单的功能获取器,其智能默认值为:

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']));