Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法检查javascript中的几个变量是否都相等?_Javascript_Jquery_Variables - Fatal编程技术网

有没有办法检查javascript中的几个变量是否都相等?

有没有办法检查javascript中的几个变量是否都相等?,javascript,jquery,variables,Javascript,Jquery,Variables,我已经包括jQuery,所以如果它有助于使用它,它是可用的 首先是一个简单的问题: 有没有办法检查几个变量是否都相等 我可以使用传递关系逻辑并执行 if ((a == b) && (b == c)) && (c == d)) ... { 为了避免对每个变量进行相互检查,但我认为应该有一种更奇特的方法来做到这一点 如果您能回答第一部分,将不胜感激 现在,棘手的部分… 我的变量数量可变(介于1和5之间) 我知道它们的值可以是DDBB中200个可能值中的任意一个 知道

我已经包括jQuery,所以如果它有助于使用它,它是可用的

首先是一个简单的问题:

有没有办法检查几个变量是否都相等

我可以使用传递关系逻辑并执行

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