如果(argList [foo] ===“ bar” || argList ===“ bar”)有更好的书写方式吗?

时间:2019-06-05 09:33:16

标签: javascript algorithm object if-statement

我有一个if声明:

if (argList["foo"] === "bar" || argList === "bar"){
    // some code
}

我想知道是否存在一种更短或更优雅的方式编写这种条件。

为什么我这样写这样的声明? 我有一个名为startTool(argList)的函数,另一个名为startCreate(argList)。

mod.zsh_apiStartTool = function(argList, callback) {
		
        // some code
		if (argList["tool"] === "measure" || argList === "measure"){
			//some code to start the tool
		}
		if (argList["tool"] === "scanning"|| argList === "scanning"){
			// some code to start the tool
		}
		ZSH_JS_API_ERROR(callback);
		return;
	}

mod.zsh_apiStartCreate = function(argList, callback) {
		
        // some code
		if (argList["tool"] === "measure"){
			mod.zsh_apiStartTool("measure")
		}
		if (argList["tool"] === "scanning"){
			mod.zsh_apiStartTool("scanning");
		}
		ZSH_JS_API_ERROR(callback);
		return;
	}

因此,当我从startCreate进入startTool时,我的变量不是argList [“ foo”] ===“ bar”,而是argList ===“ bar”

1 个答案:

答案 0 :(得分:2)

要确保属性存在恕我直言,最好使用以下辅助对象:

  • 打字稿猫王案例
  • Lodash _.get()方法

    if (_.get(argList, "foo") === "bar" || argList === "bar"){ // some code }

仅当您尝试访问更深层次的argList [“ foo”] [“ bar”]

时,此问题才严重

JSON.stringify

如果您知道您的对象中的“ bar”是确定性值,则可以通过另一种方法对对象进行字符串化处理并在此处查找值(因此,argList中没有其他属性可以容纳该对象) ):

JSON.stringify(argListObj).includes("bar")

const argListObj = { foo: "bar" };
const argListString = "bar";
console.log(JSON.stringify(argListObj).includes("bar"));
console.log(JSON.stringify(argListString).includes("bar");

// Console logs true, true