Показать сообщение отдельно
  #33 (permalink)  
Старый 12.01.2012, 19:54
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

написано без учёта повторений одинаковых значений в массивах.

function compare(arr1, arr2){
    if(arr1.length !== arr2.length) return false;

    var i = 0, a = {};
    // заносим в хеш значения первого массива.
    while(i in arr1) {
        // если на одинаковых позициях стоят одинаковые элементы, то зачем их проверять дальше?
        if(arr1[i] !== arr2[i])
            a[arr1[i]] = undefined;    
        i += 1;
    }
    // проходимся по элементам второго массива
    // если значения нет в хеше (т.е. нет в первом массиве, то сразу возвращается false
    while(i--) if(!(arr2[i] in a)) return false;
    // массивы похожи
    return true;
};

var a = ['a','b','c'], b = ['a','b','СТУЛ'], c = ['b','c','a'];
alert([compare(a,c), compare(b,c)]);


почему я использовал хеши и in ? на хабре увидел статью про то, что время на проверку существования через in во всех браузерах всегда равно нулю
хотя вместо хеша можно было бы использовать массив первый и indexOf... но это не для IE.

Последний раз редактировалось melky, 12.01.2012 в 21:49.
Ответить с цитированием