Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何避免if-else语句做同样的事情?_Javascript_Arrays_Object_If Statement - Fatal编程技术网

Javascript 如何避免if-else语句做同样的事情?

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

我试图最小化一个小js程序,但我遇到了这个问题:我不想写太多的
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中提供的新功能或技术更改时才使用此标签”