我在这里寻找了一种在javascript中比较关联数组的高质量方法。我找到的唯一不错的解决方案是PHP.JS项目,它具有一些比较数组函数。唯一的问题是,这些函数将第一个数组视为第二个数组的键。在我的情况下,至少两个数组并不总是有相同的键数,也不总是有相同的键数。这会导致函数输出的结果不包括可能在array1中不存在但在array2中存在的键。到目前为止,我能想到的唯一一件事就是运行array_diff_associative()函数两次,并翻转参数,然后组合它们(这似乎有问题,因为第一个参数又被用作第二个参数的键)。
有什么建议吗?谢谢。
发布于 2014-12-12 03:51:22
这是一个老问题,但由于它首先出现在google搜索中用于比较数组,我想我应该提出一个替代解决方案,即使当数组有两个不同的对象具有相同的值时也可以。
function arrays_equal(a, b) {
return JSON.stringify(a) == JSON.stringify(b);
}注意:这是依赖于顺序的,所以如果顺序不重要,你总是可以提前进行排序。
发布于 2009-07-10 02:59:06
我认为以下内容应该能满足您的需求:
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;
}发布于 2009-07-10 10:35:57
我真的不知道有没有比暴力方法更好的方法:
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 ),因此在应用程序中要考虑到这一点。
https://stackoverflow.com/questions/1107237
复制相似问题