我需要比较四个变量。如果任何两个变量相同,我需要显示警报。我确实喜欢以下方式。
var a =1;
var b =2;
var c =3;
var d =4;
if((a==b)||(a==c)||(a==d)||(b==c)||(b==d)||(c==d)){
alert("Value is same, Please change the value");
return false;
}
是否可以将表达式简化为分别检查所有变量的一个条件瞬间。请提前建议... TnQ。
我需要比较四个变量。如果任何两个变量相同,我需要显示警报。我确实喜欢以下方式。
var a =1;
var b =2;
var c =3;
var d =4;
if((a==b)||(a==c)||(a==d)||(b==c)||(b==d)||(c==d)){
alert("Value is same, Please change the value");
return false;
}
是否可以将表达式简化为分别检查所有变量的一个条件瞬间。请提前建议... TnQ。
好吧,我会把它扔进戒指,虽然这可能不是正确的方法,但它很有趣。(注意:浏览器兼容性问题和可能的过度杀戮即将出现)
var a = 1,
b = 2,
c = 1,
d = 3;
[a, b, c, d].sort(function(a, b) {
return a - b;
}).reduce(function(a, b) {
if (a == b) {
alert('HERE');
}
return b;
});
在这里演示:http:
//jsfiddle.net/rlemon/Eu4qG/
进一步阅读:
Array.reduce
Array.sort
while
足够。这将适用于任何长度的数组。但是a
数组会被修改,你可能需要复制。
a = [1, 2, 3, 4];
while (a.length > 1)
if (a.indexOf(a.pop()) != -1) {
alert("Value is same, Please change the value");
break;
}
我之前使用 的答案(修订版)for
有点尴尬。
这将检查任何值是否与任何其他值相同:
var values = [a, b, c, d, e, f /* ... */];
function shared_values(values) {
for (var i = 0; i < values.length; i++) {
for (var j = i; j < values.length; j++) {
if (values[i] === values[j]) {
return true;
}
}
}
return true;
}
if (shared_values(values)) {
// Don't submit form or whatever
}
您可以编写一个函数来为您检查它们,可能是这样的:
编辑:根据其他答案,您可以通过排序使其更高效
function areTwoEqual() {
var arg_list = [].slice.call(arguments).sort(
function(a,b) { return a-b; }
);
var vals = {};
for(var i = 0, len = arg_list.length; i < len; i++) {
if(vals[arg_list[i]]) {
return true;
}
vals[arg_list[i]] = '1';
}
return false;
}
var a =1;
var b =2;
var c =3;
var d =1;
if(areTwoEqual(a,b,c,d)) {
alert('Two values are identical!');
} else {
alert('all values are unique');
}
JSFiddle:http: //jsfiddle.net/thesouthstar86/j7LmZ/
避免同一元素与其自身进行比较
if (values[i] === values[j]) { }
我认为应该升级到
if ( (values[i] === values[j]) && (i != j) ) { }
但感谢脚本