Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.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语句_Javascript_Jquery - Fatal编程技术网

Javascript 如何缩短If语句

Javascript 如何缩短If语句,javascript,jquery,Javascript,Jquery,我使用if语句检查var是否与某些文本匹配,如果匹配,则更新a href。我觉得我应该可以把它缩短,而不是这样检查。我意识到一个数组可以解决这个问题,但我不确定在这种情况下该如何工作。谢谢你的帮助!:) 变量如下所示: var rank1 = $('#jobRank1').html() var rank2 = $('#jobRank2').html() var rank3 = $('#jobRank3').html() var rank4 = $('#jobRank4').html() var

我使用if语句检查var是否与某些文本匹配,如果匹配,则更新a href。我觉得我应该可以把它缩短,而不是这样检查。我意识到一个数组可以解决这个问题,但我不确定在这种情况下该如何工作。谢谢你的帮助!:)

变量如下所示:

var rank1 = $('#jobRank1').html()
var rank2 = $('#jobRank2').html()
var rank3 = $('#jobRank3').html()
var rank4 = $('#jobRank4').html()
var rank5 = $('#jobRank5').html()
if(rank1 == "Entrepreneur (Business Owner)"){
    ('#jobRank1').attr("href", "/entrepreneur")
}

if(rank2 == "Entrepreneur (Business Owner)"){
    ('#jobRank2').attr("href", "/entrepreneur")
}

if(rank3 == "Entrepreneur (Business Owner)"){
    ('#jobRank3').attr("href", "/entrepreneur")
}

if(rank4 == "Entrepreneur (Business Owner)"){
    ('#jobRank4').attr("href", "/entrepreneur")
}

if(rank5 == "Entrepreneur (Business Owner)"){
    ('#jobRank5').attr("href", "/entrepreneur")
}
If语句如下所示:

var rank1 = $('#jobRank1').html()
var rank2 = $('#jobRank2').html()
var rank3 = $('#jobRank3').html()
var rank4 = $('#jobRank4').html()
var rank5 = $('#jobRank5').html()
if(rank1 == "Entrepreneur (Business Owner)"){
    ('#jobRank1').attr("href", "/entrepreneur")
}

if(rank2 == "Entrepreneur (Business Owner)"){
    ('#jobRank2').attr("href", "/entrepreneur")
}

if(rank3 == "Entrepreneur (Business Owner)"){
    ('#jobRank3').attr("href", "/entrepreneur")
}

if(rank4 == "Entrepreneur (Business Owner)"){
    ('#jobRank4').attr("href", "/entrepreneur")
}

if(rank5 == "Entrepreneur (Business Owner)"){
    ('#jobRank5').attr("href", "/entrepreneur")
}

您可以使用switch而不是if

switch(expression) {
    case n:
        code block
        break;
    case n:
        code block
        break;
    default:
        code block
}
状况?对:错

  • 条件:你的条件

  • true:如果条件返回true,该怎么办

  • false:在强制转换条件下执行的操作返回false

    rank1==“企业家(企业主)”?(“#jobRank1”).attr(“href”,“/enterpriser”):返回


  • 像这样的东西可以完成任务:

    for (let i = 1; i <= 5; ++i) {
        let el = $('#jobRank' + i);
        if (el.html() === 'Entrepreneur (Business Owner)') {
            el.attr('href', '/entrepreneur');
        }
    }
    
    for(设i=1;i您可以使用函数通过数组执行函数。同时,您可以恢复数组元素
    rank
    及其索引
    i
    。请注意,我开始计算
    0
    ,因为列从
    1
    开始,所以需要求和
    i+1

    [
      rank1,
      rank2,
      rank3,
      rank4
    ].forEach(
      function(rank, i) {
        if(rank == "Entrepreneur (Business Owner)")
          $("#jobRank" + (i+1)).("href", "/entrepreneur");
      });
    

    我会这样做:

    [1, 2, 3, 4, 5]
      .map(i => $(`#jobRank${i}`))
      .filter($rank => $rank.html() == "Entrepreneur (Business Owner)")
      .forEach($rank => $rank.attr('href', '/entrepeneur'))
    

    如果我手边有一个
    range
    函数,我可能会用
    range(1,6)
    range(1,5)
    来替换
    [1,2,3,4,5]
    ,不过这是一种稍微实用的方法

    [1, 2, 3, 4, 5]
    .map(i => $('#jobRank' + i))
    .filter(el => el && el.html() === 'Entrepreneur (Business Owner)')
    .forEach(el => el.attr('href', '/entrepreneur'))
    

    因为您已经在使用jquery了

    $("[id^='jobRank']").filter(function(index)
        {return $(this).html()==="Entrepreneur (Business Owner)"})
        .attr("href", "/entrepreneur");
    
    一句话,就这样

    这样做的目的是选择Id以jobRank开头的所有元素,然后根据元素的html执行额外的操作

    演示:

    $(“[id^='jobRank']”)。过滤器(函数(索引){
    return$(this.html()==“企业家(企业所有者)”;})
    .attr(“href”,“企业家”)
    .addClass(“entrpreneur”);
    
    .entrpreneur{font-weight:bold;}
    
    企业家(企业主)
    上下快速移动
    布瑞恩
    企业家(企业主)
    
    企业家(企业主)
    2件事:数组和循环。
    range(1,5).map(i=>`jobRank${i}`).forEach(jr=>$(jr.html()===“Entr…”?$(jr.attr(…)
    。我投票结束这个问题,因为这个问题是为了让逻辑更好,而不是为了解决问题。因此它属于@Taplar,有没有任何东西表明这种重构是不受限制的?我认为codereview更具体地说是关于实际检查用户的代码than重构和/或重写它。@ScottSauyet如果你阅读了how to ask文档,它完全是关于如何向社区表达你的问题。让代码更好不是问题。这是重构,这是codereview网站存在的全部意义。谢谢Evan,这正是我想弄明白的)我明白了,但我相信如果其中一个#jobRange东西不存在,你的代码将以空指针失败。我假设jQuery会解决这个问题。你应该看看Clojure(脚本):@slipset:我实际上是JS函数式编程库的主要作者之一。我熟悉ClojureScript、Elm和PureScript,它们是JS的有趣替代品,尽管我不怎么使用它们。Ramda看起来不错。就像自动咖喱!这太棒了。我不得不对过滤器进行一个小的bug修复<代码>此
    需要强制转换为jQueryObject。