在Javascript/jQuery中比较多个元素值的简洁方法
Concise way to compare multiple element values in Javascript/jQuery?
也许我错过了什么,但是有没有一种更好/更简洁的方式来写这样的东西:
var a=1,
b=2,
c=3;
if(a===1 && b===1 && c===1){ do something };
或
if(a===1 || b===1 || c===1){ do something };
我试图保持代码小,所以我不寻找通过数组迭代等,就像我遇到的页面中提出的那样。我认为会有一些东西(至少对于第一个例子来说,它们都是相同的)看起来像
if(a=b=c===1){ do something? };
谢谢!
您可以采用函数式方法,并创建一个简单的比较函数生成器:
function eq(val) {
return function(x) {
return x === val
}
}
然后用.every
代替&&
:
if ([a,b,c].every(eq(1))) {
// all were equal
}
或者用.some
代替||
:
if ([a,b,c].some(eq(1))) {
// at least one was equal
}
还可以创建一个接收条件结果的函数和一个在条件为真时调用的函数:
function when(cond, fn) {
if (cond)
fn.call.apply(fn, [].slice.call(arguments, 2))
}
并将您的if
体封装到函数中…
function doIt(arg1, arg2) {
console.log("doing it!")
console.log(this, arg1, arg2)
}
然后像这样使用:
when([a,b,c].every(eq(1)), doIt, null, "foo", "bar")
when
的第三个参数设置回调函数的this
值,后面的参数作为参数传递给回调函数。
没有。你必须逐个检查。JavaScript只是没有一个操作符。
您的if(a=b=c===1){ ...
(我意识到只是一个例子)将设置 a
和b
为true
(如果c===1
)或false
(如果没有),然后仅基于c===1
进行分支。
我的意思是,对于特定的情况,有一些数学方法,但在一般情况下,没有
这将是一个可能的解决方案,取决于你想投资多少:
var slice=Function.call.bind([].slice)
var checkCondition=function(condition){
return function(){
return slice(arguments).reduce(function(o,n){
return o && o == condition(n);
},true);
}
}
greater5=checkCondition(function(x){ return x>5; });
console.log(greater5(4,7));
如果在代码中只有一两次需要检查多个变量,那么这绝对是多余的。但是,如果您有多个具有不同参数的位置,它可能会有所帮助。
您可以通过定义另一个函数轻松地定义新的检查,并添加任意多的变量。
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 在函数中添加数组元素的数值
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 将视口底部滚动到元素底部
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何使用jquery处理php循环通过元素
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 在 JavaScript 数组中的所有元素之间穿插元素的简洁方法
- 在Javascript/jQuery中比较多个元素值的简洁方法
- 是否有一种简洁的方法可以从SVG文档中提取所有元素并将它们放入html文本框中?