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')