【问题标题】:More succinct way of checking deep property values检查深层属性值的更简洁的方法
【发布时间】:2023-03-18 04:35:02
【问题描述】:

通常在检查特定属性是否有值时,您必须遍历一些对象属性或数组。这会导致像下面这样的长语句,只是为了避免error can't read property ____ of undefined

有没有办法更简洁地写这个?可能 ES6 有什么?我想我记得一些像 Lodash 这样的库提供了帮助方法但找不到它们。

if (
  user &&
  user.profile.pets &&
  user.profile.pets[0] &&
  user.profile.pets[0].type === "dog"
) {

【问题讨论】:

标签: javascript lodash


【解决方案1】:

Lodash 有两种方法:_.has_.get

_.has(object, path) 检查路径是否是对象的直接属性。

_.get(object, path, defValue) 获取对象路径的值。如果解析的值未定义,则在其位置返回 defValue

let user = {
  profile: {
pets: [{ type: 'dog' }, { type: 'cat' }]
  }
};

// _.has
console.log(_.has(user, 'profile.pets[0].type')); // true
console.log(_.has(user, 'profile.pets[3].type')); // false

// _.get
console.log(_.get(user, 'profile.pets[0].type')); // dog
console.log(_.get(user, 'profile.pets[3].type')); // undefined
console.log(_.get(user, 'profile.pets[3].type', 'unknown')); // unknown
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 2023-02-24
    相关资源
    最近更新 更多