首页 > 解决方案 > 检查深层属性值的更简洁的方法

问题描述

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

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

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

标签: javascriptlodash

解决方案


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>


推荐阅读