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

时间:2019-05-20 09:19:34

标签: 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 = 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;
}

3 个答案:

答案 0 :(得分:1)

User with user10 name logged in (user10 IS admin): GET ip/userprofiles will return ALL users profiles. GET ip/licences will return ALL licences (for all user). 不返回任何内容-使用forEach

map

答案 1 :(得分:1)

暂时忽略element = update_element(element);一无所获的事实(因为您只是更新本地element,而不是它引用的内容),您的情况可以简化为

if((wf && wf[0] == toCompare) || (req && toCompare == req[0]))

由于基本检查是toCompare等于wf[0]还是req[0],因此您基本上要添加一个检查以查看wfreq是否存在。 / p>

此时,您可以使用map而不是forEach来获得所需的结果。请注意,您必须return映射,并且任何调用advance_bthreads的函数都需要重新分配结果(即arr = advance_bthreads(toCompare, arr);

function advance_bthrads(toCompare, arr) {
    return arr.map(function(element) { // NOTICE you have to return the result
        if (element.value) {
            let wf = element.value['wait_for'];
            let req = element.value['request'];
            if((wf && wf[0] == toCompare) || (req && toCompare == req[0]))
                element = update_element(element);
        }
        return element;
    }
}

答案 2 :(得分:0)

您可以通过提前返回并合并条件来缩短它的时间。

顺便说一句,该分配无法按预期工作,您需要将数组的元素与索引一起使用。

如果update_element突变了element,则无需分配。

function advance_bthrads(toCompare, arr) {
    arr.forEach(function(element, index, array) {
        if (!element.value) return;
        let wf = element.value['wait_for'];
        let req = element.value['request'];
        if (wf && toCompare === wf[0] || req && toCompare === req[0]) {
            array[index] = update_element(element);
        }
    });
    return arr;
}