Angular ngrx:检查对象中是否存在字段
Angular ngrx: check is field exists in object
很抱歉,如果这是任何问题的重复,但是,我找不到解决问题的方法。
我有一个选择器可以得到一个带有大嵌套的大对象。我需要 return 从中获得一些价值。如何检查字段是否存在以防止崩溃?
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 计划 - 将 return 换成 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')
很抱歉,如果这是任何问题的重复,但是,我找不到解决问题的方法。
我有一个选择器可以得到一个带有大嵌套的大对象。我需要 return 从中获得一些价值。如何检查字段是否存在以防止崩溃?
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 计划 - 将 return 换成 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')