Javascript 如何避免if-else语句做同样的事情?
我试图最小化一个小js程序,但我遇到了这个问题:我不想写太多的Javascript 如何避免if-else语句做同样的事情?,javascript,arrays,object,if-statement,Javascript,Arrays,Object,If Statement,我试图最小化一个小js程序,但我遇到了这个问题:我不想写太多的if-else语句,它们都做相同的事情。有没有一种优雅的方法来重写这个函数 function advance_bthrads(toCompare, arr) { arr.forEach(function(element) { if (element.value) { let wf = element.value['wait_for']; let req = ele
if-else
语句,它们都做相同的事情。有没有一种优雅的方法来重写这个函数
function advance_bthrads(toCompare, arr) {
arr.forEach(function(element) {
if (element.value) {
let wf = element.value['wait_for'];
let req = element.value['request'];
if (wf && req) {
if (toCompare === wf[0] || toCompare === req[0]) {
element = update_element(element);
}
} else if (wf) {
if (toCompare === wf[0]) {
element = update_element(element);
}
} else if (req) {
if (toCompare === req[0]) {
element = update_element(element);
}
}
}
});
return arr;
}
forEach
不返回任何内容-使用map
:
arr = arr.map(element => {
if (element.value) {
let [wf] = element.value['wait_for'] || [0];
let [req] = element.value['request'] || [0];
if (wf && req && [wf, req].includes(toCompare)) element = update_element(element);
}
return element;
});
forEach
不返回任何内容-使用map
:
arr = arr.map(element => {
if (element.value) {
let [wf] = element.value['wait_for'] || [0];
let [req] = element.value['request'] || [0];
if (wf && req && [wf, req].includes(toCompare)) element = update_element(element);
}
return element;
});
暂时忽略
element=update\u element(element)这一事实
没有任何效果(因为您只是更新本地元素,而不是它引用的内容),您的条件可以简化为
if((wf && wf[0] == toCompare) || (req && toCompare == req[0]))
由于基本检查是toCompare
是否等于wf[0]
或req[0]
,您基本上添加了一个检查来查看wf
和req
是否存在
此时,您可以使用map
而不是forEach
来获得所需的结果。请注意,您必须返回
映射,任何函数调用advance\u b线程
都需要重新分配结果(即arr=advance\u b线程(toCompare,arr);
)
暂时忽略element=update\u element(element)这一事实
没有任何效果(因为您只是更新本地元素,而不是它引用的内容),您的条件可以简化为
if((wf && wf[0] == toCompare) || (req && toCompare == req[0]))
由于基本检查是toCompare
是否等于wf[0]
或req[0]
,您基本上添加了一个检查来查看wf
和req
是否存在
此时,您可以使用map
而不是forEach
来获得所需的结果。请注意,您必须返回
映射,任何函数调用advance\u b线程
都需要重新分配结果(即arr=advance\u b线程(toCompare,arr);
)
你可以通过提前返回并结合条件来缩短时间
顺便说一句,赋值没有按预期工作,您需要使用带有索引的数组元素
如果update\u元素
发生变异元素
,则无需赋值
function advance\u bthrads(比较,arr){
arr.forEach(函数(元素、索引、数组){
如果(!element.value)返回;
让wf=element.value['wait_for'];
让req=element.value['request'];
if(wf&&toCompare===wf[0]| | req&&toCompare===req[0]){
数组[索引]=更新元素(元素);
}
});
返回arr;
}
您可以通过提前返回并结合条件来缩短时间
顺便说一句,赋值没有按预期工作,您需要使用带有索引的数组元素
如果update\u元素
发生变异元素
,则无需赋值
function advance\u bthrads(比较,arr){
arr.forEach(函数(元素、索引、数组){
如果(!element.value)返回;
让wf=element.value['wait_for'];
让req=element.value['request'];
if(wf&&toCompare===wf[0]| | req&&toCompare===req[0]){
数组[索引]=更新元素(元素);
}
});
返回arr;
}
btw,这个元素=更新元素(元素)代码>不起作用。可能update_element(…)
更新元素,但不更新赋值。if((wf&&wf[0]==toCompare)| |(req&&toCompare==req[0])element=update_element(element)代码>应该给出相同的结果result@JackBashford请不要不必要地重新标记到[ecmascript-6]
。wiki:“仅当问题与ECMAScript 2015中提供的新功能或技术更改相关时才使用此标签”顺便说一句,此元素=更新元素(元素)代码>不起作用。可能update_element(…)
更新元素,但不更新赋值。if((wf&&wf[0]==toCompare)| |(req&&toCompare==req[0])element=update_element(element)代码>应该给出相同的结果result@JackBashford请不要不必要地重新标记到[ecmascript-6]
。来自wiki:“仅当问题特别涉及ECMAScript 2015中提供的新功能或技术更改时才使用此标签”