如何缩短陈述

时间:2017-11-30 20:50:37

标签: javascript jquery

我有if语句正在检查var是否匹配某些文本,然后更新href(如果有)。我觉得我应该能够缩短它而不是这样检查。我意识到一个数组可以解决这个问题我不知道在这种情况下它会如何工作。感谢您的任何帮助! :)

变量如下所示:

var rank1 = $('#jobRank1').html()
var rank2 = $('#jobRank2').html()
var rank3 = $('#jobRank3').html()
var rank4 = $('#jobRank4').html()
var rank5 = $('#jobRank5').html()

If语句如下所示:

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")
}

7 个答案:

答案 0 :(得分:2)

我会做这样的事情:

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

如果我有一个range函数,我可以将[1, 2, 3, 4, 5]替换为range(1, 6)range(1, 5),但它有效。

答案 1 :(得分:2)

一种稍微有效的方法

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

答案 2 :(得分:1)

这样的事情可以胜任:

var 
  A = { log: console.log(this) },
  B = {};

A.log() // A
A.log.call(A) // A

A.log.call(B) // B

答案 3 :(得分:1)

因为你已经在使用jquery

Promise

一个声明,就是这样。

这样做是选择ID为以jobRank开头的所有元素,然后根据元素的html执行额外的filter

演示:

pendingCount().then(function(count) {
    console.log(count);
});
$("[id^='jobRank']").filter(function(index)
    {return $(this).html()==="Entrepreneur (Business Owner)"})
    .attr("href", "/entrepreneur");
$("[id^='jobRank']").filter(function(index){
    return $(this).html()==="Entrepreneur (Business Owner)";})
    .attr("href", "/entrepreneur")
    .addClass("entrpreneur");
    
    

答案 4 :(得分:0)

您可以使用开关代替if

switch(expression) {
    case n:
        code block
        break;
    case n:
        code block
        break;
    default:
        code block
}

答案 5 :(得分:0)

条件?真:假

  1. 条件:你的状况。

  2. true:如果情况条件返回TRUE

  3. 该怎么办
  4. false:在施法条件中做什么返回FALSE

    rank1 ==“企业家(企业主)”? ('#jobRank1')。attr(“href”,“/ corporateur”):return

答案 6 :(得分:0)

您可以使用forEach()函数通过数组执行函数。同时,您可以恢复数组元素rank及其索引i。请注意,我开始依靠0,排名从1开始,因此需要对i+1进行求和。

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