Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays - Fatal编程技术网

Javascript 比较数组

Javascript 比较数组,javascript,arrays,Javascript,Arrays,我有一段代码,其中数组填充了数组。最后,我得到了这个包含n个成员数组的数组。这些子数组始终具有相同类型(编号)的相同数量的成员(2)。我需要知道这些子数组是否都相同(相同的成员,相同的位置)。这始终返回false: [2, 0] === [2, 0] 在我脑海中,我可以想出两种比较的方法 一个循环,其中我测试(成员[I][0]==成员[I+1][0]&&member[I][1]==成员[I+1][1]) 使用此测试的相同循环:(成员[i].toString()==成员[i+1].toStri

我有一段代码,其中数组填充了数组。最后,我得到了这个包含n个成员数组的数组。这些子数组始终具有相同类型(编号)的相同数量的成员(2)。我需要知道这些子数组是否都相同(相同的成员,相同的位置)。这始终返回false:

[2, 0] === [2, 0]
在我脑海中,我可以想出两种比较的方法

  • 一个循环,其中我测试(成员[I][0]==成员[I+1][0]&&member[I][1]==成员[I+1][1])
  • 使用此测试的相同循环:(成员[i].toString()==成员[i+1].toString()

我想我走错方向了。你觉得怎么样?

就我个人的想法而言,我认为使用循环来比较两个数组是正确的

var isTheSame = true;
for (var i in array1) {
    if (array1[i] !== array2[i]) isTheSame = false;
}
上面的循环起作用,它将返回false,或者返回与type不同的元素(三个等号==),或者返回value,或者返回length,甚至返回key

您的第二个建议不应与第一个建议完全相同,因为您已经将其转换为字符串,如果array1[0]=“true”和array2[0]=true会发生什么情况?它将返回true,因为现在它们都是字符串,但是您需要精确的比较,对吗

这是我自己的想法,我希望能有所帮助

问候,,
[x] 就我个人的想法而言,我认为使用循环来比较两个数组是正确的

var isTheSame = true;
for (var i in array1) {
    if (array1[i] !== array2[i]) isTheSame = false;
}
上面的循环起作用,它将返回false,或者返回与type不同的元素(三个等号==),或者返回value,或者返回length,甚至返回key

您的第二个建议不应与第一个建议完全相同,因为您已经将其转换为字符串,如果array1[0]=“true”和array2[0]=true会发生什么情况?它将返回true,因为现在它们都是字符串,但是您需要精确的比较,对吗

这是我自己的想法,我希望能有所帮助

问候,, [x]

也许不是最有效的,但它似乎是有效的,我强烈支持更短、更具可读性的解决方案

请注意,xx3004关于转换为字符串时丢失类型数据的观点值得考虑,除非您确定数组将由相同的数据类型组成

也许不是最有效的,但它似乎是有效的,我强烈支持更短、更具可读性的解决方案


请注意,xx3004关于转换为字符串时类型数据丢失的观点值得考虑,除非您确定数组将由相同的数据类型组成。

您可以使用下面的内容来判断两个一维数组是否相同。如果您添加维度,它需要是递归的,但我认为这足以满足您的要求

function testArray(a, b) {
    var aLen = a.length;
    var bLen = b.length;

    if (aLen === bLen) { // check for identical length first
        for (var i = 0; i < aLen; i++) {
            if (a[i] !== b[i]) {
                return false; // members don't match
            }
        }
        return true; // all members matched
    }
    return false; // not same length
}
功能测试阵列(a、b){
var aLen=a.长度;
var bLen=b.长度;
如果(aLen==bLen){//首先检查相同的长度
对于(var i=0;i

您可以使用下面的公式来判断两个一维数组是否相同。如果您添加维度,它需要是递归的,但我认为这足以满足您的要求

function testArray(a, b) {
    var aLen = a.length;
    var bLen = b.length;

    if (aLen === bLen) { // check for identical length first
        for (var i = 0; i < aLen; i++) {
            if (a[i] !== b[i]) {
                return false; // members don't match
            }
        }
        return true; // all members matched
    }
    return false; // not same length
}
功能测试阵列(a、b){
var aLen=a.长度;
var bLen=b.长度;
如果(aLen==bLen){//首先检查相同的长度
对于(var i=0;i

这就是我想到的

var arrayCompare = function(a, b) {

   var aLength = a.length,
       bLength = b.length;

   if (aLength != bLength) {
      return false;
   }

   for (var i = 0; i < aLength; i++) {
      if (a[i] !== b[i]) {
         return false;
      }
   }

   return true;

}
var arrayCompare=函数(a,b){
var aLength=a.长度,
稠度=b.长度;
如果(aLength!=bLength){
返回false;
}
对于(变量i=0;i
这就是我想到的

var arrayCompare = function(a, b) {

   var aLength = a.length,
       bLength = b.length;

   if (aLength != bLength) {
      return false;
   }

   for (var i = 0; i < aLength; i++) {
      if (a[i] !== b[i]) {
         return false;
      }
   }

   return true;

}
var arrayCompare=函数(a,b){
var aLength=a.长度,
稠度=b.长度;
如果(aLength!=bLength){
返回false;
}
对于(变量i=0;i
根据您的
toString
想法,这里有一个比较两个数组的简单方法(即使是多维数组也可以):


下面是一个比较两个数组的简单方法,它基于您的
toString
思想(即使是多维数组也可以):

如果您愿意使用,这是一个非常好的工具(我认为它和jQuery一样重要,甚至比jQuery更重要),那么您可以大大简化这段代码。在比较数组时不需要嵌套:我会事先将它们展平。那么它只是一个循环:

function cmpArrays( arr1, arr2 ){
    var flat = _.zip( _.flatten( arr1 ), _.flatten( arr2 ) );

    for( var elem in flat ){
        if( flat[elem][0] !== flat[elem][1] ){
            return false;
        }
    }

    return true;
}
将其推广到任意数量的数组也应该非常简单。

如果您愿意使用,这是一个非常好的工具(我认为它与jQuery一样重要,甚至比jQuery更重要),那么您可以大大简化此代码。在比较数组时不需要嵌套:我会事先将它们展平。那么它只是一个循环:

function cmpArrays( arr1, arr2 ){
    var flat = _.zip( _.flatten( arr1 ), _.flatten( arr2 ) );

    for( var elem in flat ){
        if( flat[elem][0] !== flat[elem][1] ){
            return false;
        }
    }

    return true;
}

将其推广到任意数量的数组也应该非常简单。

我甚至没有注意到您在问题中已经发布了此解决方案:^(+1:如果它是int,并且由逗号分隔
array1.join()==array2.join();
oooh,join,我要玩它。一个问题:
[“2”,“0”]。toString()==[2,0].toString()
。如果问题中的类型不重要,这是一个很好的、有趣的解决方案,但我只想指出这个特殊的限制。(编辑:刚刚注意到xx3004的帖子提到了这个问题。)@Bryan:xx3004在半小时前已经指出:^)我甚至没有注意到你已经在你的问题中发布了这个解决方案,直到现在:^(+1:如果它是int和I的话