Как определить равенство массивов в JavaScript? - PullRequest
9 голосов
/ 29 сентября 2011

В JavaScript есть два массива, оба в следующем формате:

[{'drink':['alcohol', 'soft', 'hot']}, {'fruit':['apple', 'pear']}];

Мне нужно определить, равны ли эти два массива или нет. они считаются равными, если они содержат одинаковые элементы в другом порядке. Как я могу это сделать?

Ответы [ 5 ]

6 голосов
/ 29 сентября 2011
  1. Проверка длины обоих массивов
  2. Цикл первого массива, сравнение каждой переменной со вторым массивом.

Если 1 и 2и то же самое, ваш массив равен.

Функция для сравнения объектов / массивов:

Зацикливание истинных массивов может быть достигнуто с помощью for(var i=0; i<array.length; i++).Просматривать свойства такого объекта можно с помощью for(var i in object).

function recursiveCompare(obj, reference){
    if(obj === reference) return true;
    if(obj.constructor !== reference.constructor) return false;
    if(obj instanceof Array){
         if(obj.length !== reference.length) return false;
         for(var i=0, len=obj.length; i<len; i++){
             if(typeof obj[i] == "object" && typeof reference[j] == "object"){
                 if(!recursiveCompare(obj[i], reference[i])) return false;
             }
             else if(obj[i] !== reference[i]) return false;
         }
    }
    else {
        var objListCounter = 0;
        var refListCounter = 0;
        for(var i in obj){
            objListCounter++;
            if(typeof obj[i] == "object" && typeof reference[i] == "object"){
                if(!recursiveCompare(obj[i], reference[i])) return false;
            }
            else if(obj[i] !== reference[i]) return false;
        }
        for(var i in reference) refListCounter++;
        if(objListCounter !== refListCounter) return false;
    }
    return true; //Every object and array is equal
}

Если вы не понимаете функцию, не стесняйтесь запросить объяснение в комментариях.

2 голосов
/ 29 сентября 2011

Это отвечает на ваш вопрос? Как проверить, равны ли два массива с JavaScript?

var equal = array1.compareArrays(array2);
1 голос
/ 29 сентября 2011

http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256BFB0077DFFD

Посмотрите здесь, второй пример - функция, которая делает именно это.

Аналогичная функция, которая делает то же самое, может быть найдена в нижней части этогостр.

http://zeeohemgee.blogspot.com/2006/07/comparing-and-copying-arrays-in.html

Надеюсь, это поможет

Приветствия

0 голосов
/ 29 сентября 2011

С помощью Javascript вы не можете проверить, равны ли массивы, но вы можете сравнить их следующим образом:

var arr1 = ['alcohol', 'soft', 'hot'],
    arr2 = ['apple', 'pear'],
    arr3 = ['soft', 'hot', 'alcohol'];

function isSame(a1, a2){
    return !(a1.sort() > a2.sort() || a1.sort() < a2.sort());
}

console.log( isSame(arr1, arr2) ); //false
console.log( isSame(arr1, arr3) ); //true

В sort все элементы расположены в одинаковом порядке, и если оба < и > сравнения ложны, это означает, что оба одинаковы.

0 голосов
/ 29 сентября 2011

Вы можете попробовать это JSON.stringify(array1)===JSON.stringify(array2);, если хотите, чтобы порядок также был одинаковым в обоих массивах.

...