【问题标题】:Access object property with variable and fallback to default property if non-existing使用变量访问对象属性,如果不存在则回退到默认属性
【发布时间】:2018-11-13 09:36:44
【问题描述】:

我是 JavaScript 中 switch 语句的新手。很酷的一点是,它结合了多个 if 语句和一个默认结果,如果所有 if 都失败了。

我是一个好奇的人,想知道如果所有其他方法都失败了,如何使用带有变量的对象属性选择来实现这个“默认”。

例子:

const action.type = "non-existing-property";

const runF = {
  CREATE_PROJECT_SUCCESS: () => {
    console.log("created project");
    return state;
  },
  CREATE_PROJECT_ERROR: () => {
    console.log("create project error");
    return state;
  },
  default: ()=>{
    console.log("Do default stuff if all else failed");
    return state;
  }
}[action.type];
runF();

通常 action.type 值是 CREATE_PROJECT_SUCCESS 或 CREATE_PROJECT_ERROR。但是,如果财产不存在怎么办?然后我想运行默认属性。

有人知道如何做到这一点吗?


更新:

我找到了一种可能的解决方案,但这需要另一个 if 语句。我希望看到一个更小、更快速的解决方案。 const action.type = "不存在的属性";

let runF = {
  CREATE_PROJECT_SUCCESS: () => {
    console.log("created project");
    return state;
  },
  CREATE_PROJECT_ERROR: () => {
    console.log("create project error");
    return state;
  }
}[action.type];

if (!runF) {
  //runF not defined/valid -> run default function
  runF = () => {
    console.log("Do default stuff if all else failed");
    return state;
  };
}

runF();

【问题讨论】:

  • 你在 Redux 中使用这个语句吗?在这种情况下,请使用 switch 语句而不是此代码。
  • 是的,它与 redux 一起使用。我和我的老师讨论了 switch redux,他说 switch 语句可能是不好的做法。但这不在这个问题范围内,我只是想看看使用对象而不是开关的有效替代方案。

标签: javascript object properties switch-statement key


【解决方案1】:

您可以在属性访问器中使用逻辑 OR 运算符 (||) 来实现回退到默认属性名称。像这样的:

const runF = {
  CREATE_PROJECT_SUCCESS: () => {
    console.log("created project");
    return state;
  },
  CREATE_PROJECT_ERROR: () => {
    console.log("create project error");
    return state;
  },
  default: ()=>{
    console.log("Do default stuff if all else failed");
    return state;
  }
}[action.type || 'default'];
runF();

【讨论】:

  • 我知道我会在这里找到我的饼干!感谢这个漂亮的解决方案!
猜你喜欢
  • 1970-01-01
  • 2016-02-11
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 2021-10-25
相关资源
最近更新 更多