比较两个数组Javascript - Associative

时间:2009-07-10 01:10:58

标签: javascript arrays comparison associative

我在这里搜索了一个质量方法来比较javascript中的关联数组。我找到的唯一合适的解决方案是PHP.JS项目,它具有一些比较数组函数。唯一的问题是这些函数将第一个数组视为第二个数组的关键。在我的情况下,至少两个数组并不总是具有相同的键数和相同的键。这会导致函数输出不包含array1中可能不存在但在array2中存在的键的结果。到目前为止,我唯一能想到的就是在翻转参数的情况下运行array_diff_associative()函数两次然后将它们组合起来(这似乎有问题,因为第一个参数再次被用作第二个参数的键)。

有什么建议吗? 谢谢。

3 个答案:

答案 0 :(得分:8)

这是一个老问题,但是因为它首先出现在谷歌搜索比较数组中,我想我会投入一个替代解决方案,即使数组有两个具有相同值的不同对象也能正常工作。

function arrays_equal(a, b) {
    return JSON.stringify(a) == JSON.stringify(b);
}

注意:这取决于订单,因此如果订单无关紧要,您可以随时提前排序。

答案 1 :(得分:7)

我认为以下内容应该符合您的要求:

function nrKeys(a) {
    var i = 0;
    for (key in a) {
        i++;
    }
    return i;
}
function compareAssociativeArrays(a, b) {
   if (a == b) {
       return true;
   }   
   if (nrKeys(a) != nrKeys(b)) {
       return false;
   }
   for (key in a) {     
     if (a[key] != b[key]) {
         return false;
     }
   }
   return true;
}

答案 2 :(得分:2)

我真的不知道是否有比蛮力方法更好的方法:

function differences(a, b){
  var dif = {};
  for(key in a){ //In a and not in b
    if(!b[key]){
      dif[key] = a[key];
    }
  }
  for(key in a){ //in a and b but different values
    if(a[key] && b[key] && a[key]!=b[key]){
      //I don't know what you want in this case...
    }
  }
  for(key in b){ //in b and not in a
    if(!a[key]){
      dif[key] = b[key];
    }
  }
  return dif;
}

此外,它们是对象,而不是数组,并且某些属性不能通过for..in枚举(例如,像Array.length),因此请将其考虑在内。