Javascript 如何缩短If语句
我使用if语句检查var是否与某些文本匹配,如果匹配,则更新a href。我觉得我应该可以把它缩短,而不是这样检查。我意识到一个数组可以解决这个问题,但我不确定在这种情况下该如何工作。谢谢你的帮助!:) 变量如下所示: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
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
}
状况?对:错
像这样的东西可以完成任务:
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。