有没有办法检查javascript中的几个变量是否都相等?
我已经包括jQuery,所以如果它有助于使用它,它是可用的 首先是一个简单的问题: 有没有办法检查几个变量是否都相等 我可以使用传递关系逻辑并执行有没有办法检查javascript中的几个变量是否都相等?,javascript,jquery,variables,Javascript,Jquery,Variables,我已经包括jQuery,所以如果它有助于使用它,它是可用的 首先是一个简单的问题: 有没有办法检查几个变量是否都相等 我可以使用传递关系逻辑并执行 if ((a == b) && (b == c)) && (c == d)) ... { 为了避免对每个变量进行相互检查,但我认为应该有一种更奇特的方法来做到这一点 如果您能回答第一部分,将不胜感激 现在,棘手的部分… 我的变量数量可变(介于1和5之间) 我知道它们的值可以是DDBB中200个可能值中的任意一个 知道
if ((a == b) && (b == c)) && (c == d)) ... {
为了避免对每个变量进行相互检查,但我认为应该有一种更奇特的方法来做到这一点
如果您能回答第一部分,将不胜感激
现在,棘手的部分…
我的变量数量可变(介于1和5之间)
我知道它们的值可以是DDBB中200个可能值中的任意一个
知道这些变量中每个值有多少个实例的最佳方法是什么
例如
如果我有…
var1 = VALUE_A;
var2 = VALUE_A;
var3 = VALUE_B;
var4 = VALUE_Z;
var5 = VALUE_Z;
var1 = VALUE_A;
var2 = VALUE_C;
var3 = VALUE_B;
var1 = VALUE_A;
var2 = VALUE_A;
var3 = VALUE_A;
var4 = VALUE_C;
var5 = VALUE_C;
var1 = VALUE_A;
var2 = VALUE_A;
var3 = VALUE_A;
。。。我想得到这样的东西:
result["VALUE_A"] => 2
result["VALUE_B"] => 1
result["VALUE_Z"] => 2
///////////////////////////
或者如果我有…
var1 = VALUE_A;
var2 = VALUE_A;
var3 = VALUE_B;
var4 = VALUE_Z;
var5 = VALUE_Z;
var1 = VALUE_A;
var2 = VALUE_C;
var3 = VALUE_B;
var1 = VALUE_A;
var2 = VALUE_A;
var3 = VALUE_A;
var4 = VALUE_C;
var5 = VALUE_C;
var1 = VALUE_A;
var2 = VALUE_A;
var3 = VALUE_A;
。。。获取:
result["VALUE_A"] => 1
result["VALUE_C"] => 1
result["VALUE_B"] => 1
result["VALUE_A"] => 3
result["VALUE_C"] => 2
result["VALUE_A"] => 3
///////////////////////////
或者如果我有…
var1 = VALUE_A;
var2 = VALUE_A;
var3 = VALUE_B;
var4 = VALUE_Z;
var5 = VALUE_Z;
var1 = VALUE_A;
var2 = VALUE_C;
var3 = VALUE_B;
var1 = VALUE_A;
var2 = VALUE_A;
var3 = VALUE_A;
var4 = VALUE_C;
var5 = VALUE_C;
var1 = VALUE_A;
var2 = VALUE_A;
var3 = VALUE_A;
。。。获取:
result["VALUE_A"] => 1
result["VALUE_C"] => 1
result["VALUE_B"] => 1
result["VALUE_A"] => 3
result["VALUE_C"] => 2
result["VALUE_A"] => 3
///////////////////////////
或者如果我有…
var1 = VALUE_A;
var2 = VALUE_A;
var3 = VALUE_B;
var4 = VALUE_Z;
var5 = VALUE_Z;
var1 = VALUE_A;
var2 = VALUE_C;
var3 = VALUE_B;
var1 = VALUE_A;
var2 = VALUE_A;
var3 = VALUE_A;
var4 = VALUE_C;
var5 = VALUE_C;
var1 = VALUE_A;
var2 = VALUE_A;
var3 = VALUE_A;
。。。获取:
result["VALUE_A"] => 1
result["VALUE_C"] => 1
result["VALUE_B"] => 1
result["VALUE_A"] => 3
result["VALUE_C"] => 2
result["VALUE_A"] => 3
希望我是清楚的。举例是我想清楚解释的唯一方法。
如果这对Javascript来说太复杂,或者处理太多可能的值(最多5倍)会使浏览器速度变慢,我可以用PHP实现,并通过AJAX获得结果,但我不想这样做。对于第一个问题,我认为没有任何特殊的方法可以做到这一点 第二点:我建议将这些变量存储在数组中。因此,您的代码变成:
var myVars = [];
myVars[0] = VALUE_A;
myVars[1] = VALUE_A;
myVars[2] = VALUE_B;
myVars[3] = VALUE_Z;
myVars[4] = VALUE_Z;
然后,只需在数组中循环并计算每个值的出现次数 关于你的第一个问题,我认为没有什么特别的方法可以做到这一点 第二点:我建议将这些变量存储在数组中。因此,您的代码变成:
var myVars = [];
myVars[0] = VALUE_A;
myVars[1] = VALUE_A;
myVars[2] = VALUE_B;
myVars[3] = VALUE_Z;
myVars[4] = VALUE_Z;
然后,只需在数组中循环并计算每个值的出现次数 我认为您需要创建自己的对象。该对象基本上是一个围绕键/值对数组的包装器。然后,您需要为.isTrue()或其他对象提供一些方法 你说你想要更漂亮的。。。。 那么,为什么不在数组对象中添加您自己的方法和属性来完成任务呢。。。。希望这足够清楚
KeyValuePair.prototype.value = null;
KeyValuePair.prototype.key = null;
function KeyValuePair(key, value) {
this.key = key;
this.value = value;
this.Equals = Equals;
function Equals(o) {
if (this.value == o.value)
return true;
else
return false;
}
}
Array.prototype.ValuesAreEqual = ValuesAreEqual;
Array.prototype.GetValues = GetValues;
function ValuesAreEqual() {
this.sort();
for (var i = 0; i <= this.length - 1; i++) {
var last = this.pop();
var first = this.shift();
if (first) {
return first.Equals(last);
}
}
}
function GetValues(value) {
var arr = new Array();
if (this.length > 0) {
for (var i = 0; i <= this.length - 1; i++) {
if (this[i].value) {
if (this[i].value == value) {
arr.push(this[i].value);
}
}
}
}
return arr;
}
//code below would demonstrate the functionality of the above.
var x = new Array();
x.push(new KeyValuePair("A","Hello"));
x.push(new KeyValuePair("B","Hello"));
x.push(new KeyValuePair("C","Hello"));
var y = x.GetValues("Hello");
document.writeln(y.length);
document.writeln('\r\n');
document.writeln(x.ValuesAreEqual());
KeyValuePair.prototype.value=null;
KeyValuePair.prototype.key=null;
函数KeyValuePair(键,值){
this.key=key;
这个值=值;
这个。等于等于等于;
函数等于(o){
if(this.value==o.value)
返回true;
其他的
返回false;
}
}
Array.prototype.ValuesAreEqual=ValuesAreEqual;
Array.prototype.GetValues=GetValues;
函数值Reequal(){
this.sort();
对于(变量i=0;i 0){
对于(var i=0;i我认为您需要创建自己的对象。该对象基本上是一个围绕键/值对数组的包装器。然后,您需要对.isTrue()或其他对象使用两个方法
你说你想要更漂亮的。。。。
那么,为什么不在数组对象中添加您自己的方法和属性来完成任务呢……希望这已经足够清楚了
KeyValuePair.prototype.value = null;
KeyValuePair.prototype.key = null;
function KeyValuePair(key, value) {
this.key = key;
this.value = value;
this.Equals = Equals;
function Equals(o) {
if (this.value == o.value)
return true;
else
return false;
}
}
Array.prototype.ValuesAreEqual = ValuesAreEqual;
Array.prototype.GetValues = GetValues;
function ValuesAreEqual() {
this.sort();
for (var i = 0; i <= this.length - 1; i++) {
var last = this.pop();
var first = this.shift();
if (first) {
return first.Equals(last);
}
}
}
function GetValues(value) {
var arr = new Array();
if (this.length > 0) {
for (var i = 0; i <= this.length - 1; i++) {
if (this[i].value) {
if (this[i].value == value) {
arr.push(this[i].value);
}
}
}
}
return arr;
}
//code below would demonstrate the functionality of the above.
var x = new Array();
x.push(new KeyValuePair("A","Hello"));
x.push(new KeyValuePair("B","Hello"));
x.push(new KeyValuePair("C","Hello"));
var y = x.GetValues("Hello");
document.writeln(y.length);
document.writeln('\r\n');
document.writeln(x.ValuesAreEqual());
KeyValuePair.prototype.value=null;
KeyValuePair.prototype.key=null;
函数KeyValuePair(键,值){
this.key=key;
这个值=值;
这个。等于等于等于;
函数等于(o){
if(this.value==o.value)
返回true;
其他的
返回false;
}
}
Array.prototype.ValuesAreEqual=ValuesAreEqual;
Array.prototype.GetValues=GetValues;
函数值Reequal(){
this.sort();
对于(变量i=0;i 0){
对于(VarI=0;i这样做可以吗
function countOccurrences(arr) {
var result = {};
$.each(arr, function(index, value) {
if (!result[value])
result[value] = 1;
else
result[value]++;
});
return result;
}
此函数接受一个值数组,并返回一个对象,该对象的键是元素,值是每个元素的出现次数。这样做可以吗
function countOccurrences(arr) {
var result = {};
$.each(arr, function(index, value) {
if (!result[value])
result[value] = 1;
else
result[value]++;
});
return result;
}
此函数接受一个值数组,并返回一个对象,其键是元素,值是每个元素的出现次数。回答第一个问题
如果要比较的变量很多,此函数可能会有所帮助
function allEq(arr)
{
var next;
var curr = arr.pop();
while (arr.length)
{
next = arr.pop();
if (curr != next)
return false;
curr = next;
}
return true;
}
var a = 1, b = 1, c = 1, d = 1;
var myArr = [a, b, c, d];
if (allEq(myArr)) ... {
回答第一个问题
如果要比较的变量很多,此函数可能会有所帮助
function allEq(arr)
{
var next;
var curr = arr.pop();
while (arr.length)
{
next = arr.pop();
if (curr != next)
return false;
curr = next;
}
return true;
}
var a = 1, b = 1, c = 1, d = 1;
var myArr = [a, b, c, d];
if (allEq(myArr)) ... {
简单的回答是不,这是不可能的。JavaScript允许从环境中提取局部变量定义
长答案更为微妙。不使用var
声明的变量或在窗口上声明的变量通常是可访问的,但这样做是一件令人头痛的事。通常可以通过eval获得变量的值,但这仍然不能访问变量的名称(这就是您需要的所有上述内容)
如果有一系列已知值,则可以循环变量:
var tests = [
VALUE_A,
VALUE_B,
VALUE_A,
VALUE_C
]
function areAllEqual( arr )
{
for( var i = 0; i < arr.length - 1; i++ )
{
if( arr[ i ] != arr[ i + 1 ] ) return false;
}
return true;
}
console.log( areAllEqual( tests ) ) // false;
console.log( areAllEqual( [1,1,1] ) ) // true;
function getOccurances(arr) {
var result = {};
for( var i = 0; i < arr.length; i++ )
{
if( isNaN( result[ arr[ i ] ] ) ) result[ arr[ i ] ] = 1;
else result[ arr[ i ] ]++;
}
return result;
}
// this is not guaranteed to be in any order.
console.log( getOccurances( tests ) ) // {VALUE_A:2, VALUE_B:1, VALUE_C:1};
var测试=[
价值观,
价值观,
价值观,
价值
]
功能区同等(arr)
{
对于(变量i=0;i简短的回答是不,这是不可能的。JavaScript允许从环境中提取局部变量定义
长答案更为微妙。未声明var