替换“||” Javascript 中的条件句
Replacing "||" Conditionals in Javascript
好吧,这是我的第一个堆栈溢出 post!
大家好,最近学习了很多关于函数式编程的知识。我在 funfunfunction 找到了一些较旧的视频,这激起了我的胃口,我一直在玩这些视频。
我的问题是……是否有 better/different/preferred 重构这段代码的方法:
if ( bodyClasses.contains("first-class") || bodyClasses.contains("second-class") || bodyClasses.contains("third-class") ) {
pages.filter((page) => searchAndReplace( page.postType, ".selector" ));
}
我尝试使用 reduce()
,但很快了解到我需要在第一次迭代返回 true
时过早地中断 reduce。我觉得 if 语句在这里很有意义,但我只是好奇。
我知道这是一小段没有上下文的代码,但问题是关于 概念 而不是 功能 。
对于任何回复的人,我提前感谢您!
归根结底,||
可能需要放在某个地方,但也许我们可以把它们藏起来。我喜欢在我的 if 子句中使用谓词来提高可读性和创建可重用的函数。
const hasSupport = classes =>
classes.some(cls => cls === "class1" || cls === "class2" || cls === "class3");
if (hasSupport(bodyClasses)) { ... }
最后要考虑的部分是在您的 if
声明中。该过滤器将 return 一个新列表,但您不会将数据存储在任何地方。所以,如果你真的想要一个新列表,那么将它存储在一个变量中:
const supportedPages = hasSupport(bodyClasses)
? pages.filter(...)
: []
如果您想要这些副作用,请使用 forEach 循环:
if (hasSupport(bodyClasses) { pages.forEach(...) }
要摆脱 or,匹配 .some
数组值:
if(["first-class", "second-class", "third-class"].some(cls => bodyClasses.contains(cls)))
/*...*/;
如果您不对返回值做任何事情,我不会使用 .filter
,那么只需使用 .forEach
.
好吧,这是我的第一个堆栈溢出 post!
大家好,最近学习了很多关于函数式编程的知识。我在 funfunfunction 找到了一些较旧的视频,这激起了我的胃口,我一直在玩这些视频。
我的问题是……是否有 better/different/preferred 重构这段代码的方法:
if ( bodyClasses.contains("first-class") || bodyClasses.contains("second-class") || bodyClasses.contains("third-class") ) {
pages.filter((page) => searchAndReplace( page.postType, ".selector" ));
}
我尝试使用 reduce()
,但很快了解到我需要在第一次迭代返回 true
时过早地中断 reduce。我觉得 if 语句在这里很有意义,但我只是好奇。
我知道这是一小段没有上下文的代码,但问题是关于 概念 而不是 功能 。
对于任何回复的人,我提前感谢您!
归根结底,||
可能需要放在某个地方,但也许我们可以把它们藏起来。我喜欢在我的 if 子句中使用谓词来提高可读性和创建可重用的函数。
const hasSupport = classes =>
classes.some(cls => cls === "class1" || cls === "class2" || cls === "class3");
if (hasSupport(bodyClasses)) { ... }
最后要考虑的部分是在您的 if
声明中。该过滤器将 return 一个新列表,但您不会将数据存储在任何地方。所以,如果你真的想要一个新列表,那么将它存储在一个变量中:
const supportedPages = hasSupport(bodyClasses)
? pages.filter(...)
: []
如果您想要这些副作用,请使用 forEach 循环:
if (hasSupport(bodyClasses) { pages.forEach(...) }
要摆脱 or,匹配 .some
数组值:
if(["first-class", "second-class", "third-class"].some(cls => bodyClasses.contains(cls)))
/*...*/;
如果您不对返回值做任何事情,我不会使用 .filter
,那么只需使用 .forEach
.