首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较两个数组Javascript - Associative

比较两个数组Javascript - Associative
EN

Stack Overflow用户
提问于 2009-07-10 01:10:58
回答 3查看 34.4K关注 0票数 9

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

有什么建议吗?谢谢。

EN

回答 3

Stack Overflow用户

发布于 2014-12-12 03:51:22

这是一个老问题,但由于它首先出现在google搜索中用于比较数组,我想我应该提出一个替代解决方案,即使当数组有两个不同的对象具有相同的值时也可以。

代码语言:javascript
复制
function arrays_equal(a, b) {
    return JSON.stringify(a) == JSON.stringify(b);
}

注意:这是依赖于顺序的,所以如果顺序不重要,你总是可以提前进行排序。

票数 10
EN

Stack Overflow用户

发布于 2009-07-10 02:59:06

我认为以下内容应该能满足您的需求:

代码语言:javascript
复制
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;
}
票数 7
EN

Stack Overflow用户

发布于 2009-07-10 10:35:57

我真的不知道有没有比暴力方法更好的方法:

代码语言:javascript
复制
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 ),因此在应用程序中要考虑到这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1107237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档