javascript - 检查深层属性值的更简洁的方法
问题描述
通常在检查特定属性是否有值时,您必须遍历一些对象属性或数组。这会导致像下面这样的长语句,只是为了避免error can't read property ____ of undefined
.
有没有办法更简洁地写这个?可能 ES6 有什么?我想我记得一些像 Lodash 这样的库提供了帮助方法,但找不到它们。
if (
user &&
user.profile.pets &&
user.profile.pets[0] &&
user.profile.pets[0].type === "dog"
) {
解决方案
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>
推荐阅读
- azure - 如何手动将 ASP.NET Core 应用程序的部署版本复制到 Azure Web 应用程序(应用服务)
- javascript - 有没有办法在 .NET 6 MAUI 中创建 shell 应用程序和 web 视图之间的双向通信?
- kubernetes - 将 Helm 图表自动部署到 Kubernetes
- javascript - 垂直条形图未正确显示
- python - 具有自动特定轮廓识别的视频裁剪
- java - 如何使用 WebClient 从分页的 REST API 获取数据
- reactjs - 在绘制元素之前如何获取元素?
- java - 如何在 Spring 中拥有多个相同的后端?
- ada - Gpr 文件,不要在源代码中包含所有目录
- android - 如何对全局文本使用 android 可访问性?