检查深度属性值的更简洁方法

时间:2018-06-22 22:26:54

标签: javascript lodash

通常,在检查特定属性是否具有值时,必须遍历某些对象属性或数组。这导致了如下长语句,只是为了避免使用error can't read property ____ of undefined

有没有一种更简洁的方式写这个? ES6可能有东西吗?我以为我记得有些像Lodash的库提供了辅助方法,但找不到它们。

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

1 个答案:

答案 0 :(得分:1)

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

_.has(object, path)检查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>