Compare two Arrays Javascript - Associative

后端 未结 3 497
醉梦人生
醉梦人生 2021-01-17 22:30

I have searched on here for a quality method to compare associative arrays in javascript. The only decent solution I have found is the PHP.JS project which has some comparat

相关标签:
3条回答
  • 2021-01-17 23:05

    This is an old question, but since it comes up first in a google search for comparing arrays, I thought I would throw in an alternative solution that works even when the array has two different objects with the same values.

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

    Note: This is order dependent, so if order doesn't matter, you can always do a sort ahead of time.

    0 讨论(0)
  • 2021-01-17 23:10

    I think the following should do what you want:

    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;
    }
    
    0 讨论(0)
  • 2021-01-17 23:18

    I really don't know if there is a nicer way to do it than the brute force approach:

    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;
    }
    

    Also, they are objects, not arrays, and some properties will not be enumerable through for..in (like Array.length, for example), so take it into account for your application.

    0 讨论(0)
提交回复
热议问题