javascript,比较不同大小的数组

时间:2012-02-12 12:08:40

标签: javascript arrays

有两个可能不同大小的数组,最好的方法是查看它们是否相同

例如

var a1 = [ 1, 2, 3 ];
var a2 = [ 1, 2 ];
var a3 = [ 1, 3 ];

a1 == a2 => true;
a1 == a3 => false;

我很肯定这已经完成了数千次并且语法记忆很好

7 个答案:

答案 0 :(得分:4)

这个怎么样(我只是在a1和a2上演示 - >我认为你可以用它来制作功能):

var min_val = min(a1.length, a2.length);
var equals = true;

for(i = 0; i < min_val; i++)
{
    if(a1[i] != a2[i])
    {
        equals = false;
        break;
    }
}

结果当然是等于变量。如果你想用这个来创建函数,只需传递a1和a2作为参数并返回equals。

答案 1 :(得分:3)

function compareArraySeq(a1, a2) {
  var i, l = Math.min(a1.length, a2.length); 

  for (i=0; i<l; i++) {
    if (a1[i] !== a2[i]) return false;
  }
  return true;
}

答案 2 :(得分:3)

基于Tomalaks评论的

[编辑]我会说JSON可以拯救。

所以,再说一次:这是一个数组扩展,可以做[我想]你想做的事情:

function comparePartial(arr1,arr2){
  var arr2 = this, l1 = arr1.length, l2 = arr2.length;

  return ( l1<1 || l2<1
            ? false :
              JSON.stringify(arr1.slice(0, l2)) ===
              JSON.stringify(arr2.slice(0, l1))
         );
}
Array.prototype.comparePartial = 
    Array.prototype.comparePartial || comparePartial;

//usage
    var a1 = [ 1, 2, 3 ]
   ,a2 = [ 1, 2 ]
   ,a3 = [ 1, 3 ]
   ,a4 = ['','']
   ,a5 = ['','','']
   ,a6 = []
   ,a7 = ['bla','doh',1]
   ,a8 = ['bla','doh',1,'yeah','really']
   ,a9 = [1,3,5,'doh']
   ,a10= ['1','3','5','doh']
   ,a11= [{a:1,b:2},{c:3,d:4}]
   ,a12= [{a:1,b:2},{c:3,d:4},{e:5,f:6}]

console.log(
  [ a1.comparePartial(a2)
   ,a2.comparePartial(a1)
   ,a1.comparePartial(a3)
   ,a4.comparePartial(a5)
   ,a5.comparePartial(a6)
   ,a1.comparePartial(a6)
   ,a8.comparePartial(a7)
   ,a10.comparePartial(a9)  //=> 'type safe' comparison
   ,a11.comparePartial(a12) //=> can compare arrays of Objects
  ].join(' - ')
); //=> true - true - false - true - false - false - true - false - true

答案 3 :(得分:3)

function compareArraySeq(a, b) {
    return a.slice(0, b.length).join(' ') == b.slice(0, a.length).join(' ');
}

答案 4 :(得分:0)

function prefixEqual(a, b) {
    var prefixLength = a.length < b.length ? a.length : b.length;
    for(var i = 0; i < prefixLength; i+=1)
        if( a[i] != b[i] )
            return false;
    return true;
}

答案 5 :(得分:0)

一次循环检查一个点。 我做了这个:

var compare = function (a1, a2) {
    var l = Math.min(a1.length, a2.length);
    for (var i = 0; i < l; i++) {
        if (a1[i] !== a2[i]) {
            return false;
        }
    }
    return true;
}

现在您可以比较这样的数组:

var a = [0, 1, 2, 3];
var b = [0, 1, 2];
var c = [0, 1, 3];

compare(a, b); //true
compare(a, c); //false

希望这适合你:)

小提琴链接:http://jsfiddle.net/8zbJj/1/

答案 6 :(得分:0)

如果你的数组是字符串,数字或布尔值,你可以比较它们的字符串值。

function compareSimpleValues(a,b){
  if(a.length>=b.length)return String(a).indexOf(String(b))===0;
  return String(b).indexOf(String(a))===0;
}