首页 > 解决方案 > 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但我认为这不是一个好的选择。

标签: angulartypescriptngrxngrx-entity

解决方案


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

推荐阅读