angular - Angular ngrx:检查对象中是否存在字段
问题描述
如果这是任何问题的重复,我很抱歉,但是,我找不到解决我的问题的方法。
我有一个选择器,它可以获取一个带有大嵌套的大对象。我需要从中返回一些价值。如何检查是否存在字段以防止崩溃?
export const getSingleValue = createSelector(
getEntities,
(entities) => entities
.map(item => {
// need to check is field and oneMoreField, etc. exist
return item.field.oneMoreField.andMoreField.andHereIs.value || null;
})
);
B 计划 - 包装回归,try-catch
但我认为这不是一个好的选择。
解决方案
Typescript 不支持开箱即用的 Elvis 运算符。
所以你有一些选择:
手动检查属性是否存在,例如:
if(item && item.field && item.field.oneMoreField)
return item.field.oneMoreField;
// or
return item && item.field && item.field.oneMoreField;
使用代理对象:
function safe(obj) {
return new Proxy(obj, {
get: function(target, name) {
const result = target[name];
if (!!result) {
return (result instanceof Object)? safe(result) : result;
}
return safe({});
}
});
}
return safe(item.field.oneMoreField);
或者使用诸如 Lodash 之类的库:
_.get(item, 'field.oneMoreField')
推荐阅读
- javascript - javascript中的数组对象中的foreach我无法访问元素
- python - Python 返回类型转换为 C++
- git - 如何使用 Git 在本地撤消所有操作?
- c# - 在 Unity 中,当我编写 Debug.Log(" ") 时出现错误,提示 UnityEngine.Log 和 System.Log 之间存在差异。我该如何解决?
- core-data - NavigationLink 自动激活
- reactjs - 使用 React Axios POST 请求时未设置 Express Session Cookie
- vue.js - 功能组件内的vue导入组件
- robotframework-ide - 我如何知道 Robot Framework IDE (RIDE) 开发有哪些变化?
- ruby-on-rails - 将 data-action 与 cocoon:after-insert 一起使用
- java - 如何在反应器 webflux 中丰富对象?