Цитата:
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','c'], c = ['b','c','a','a']; alert( compare(a,c));//true ?? |
рони, ого. спасибо, что нашли. мой алгоритм не представляет нормального решения для этого. только, если ввести числа вхождений в массив. но это уже ваш код.
|
рони, я мож чего не понимаю, но почему эти два массива равны? ['a','b','c','c'] и ['b','c','a','a']
var a = ['a','b','c','c'], c = ['b','c','a','a']; Gozar, я не говорил, что она меня не устроила. Я сказал, что в IE работать не будет. melky, тему с ходу не нашел, но за JSDoc спасибо) За переделку извиняюсь. Первое, что пришло в голову (мог накосячить, голова к вечеру не варит) function arrComp(x, z) { if(x.length !== z.length) return false; var i = 0, a = {}; while(i in x) { if(x[i] !== z[i]) x[i] in a ? a[x[i]]++ : a[x[i]] = 1; i++; } while(i--) if(z[i] in a) if(--a[z[i]] < 0) return false; return true; }; var a = ['a','b','c','c'], c = ['b','c','a','a']; alert(arrComp(a,c)); // false var a = ['c','b','a','d','a'], c = ['a','d','c','a','b']; alert(arrComp(a,c)); // true |
Цитата:
|
Оптимальный вариант )))
function compare(arr1, arr2){ if(arr1.length !== arr2.length) return false; arr1.sort(); arr2.sort(); var i = arr1.length; while(i--) if(arr1[i] !== arr2[i]) return false; return true; }; var a = ['a','b','c','c'], c = ['b','c','a','a'], d = ['b','c','c','a']; alert([compare(a,c),compare(a,d)]); |
Цитата:
Будет всё работать в IE. Прочитай внимательно моё первое сообщение! |
Что-то мою функцию еще ни кто не переплюнул я смотрю))
Что, неужели ни чего лучше моего брутфорса у вас не получается? ЛИЧНО у меня больше идей - нет! По этому так и сделал) |
Цитата:
Велосипеды изобретать весело только изобретателям велосипедов. Для сравнения массива из пяти элементов брутфорсы не нужны. Там где есть родной indexOf будет работать весело, там где нет родного, чуть медленнее. Вопрос в том: - заметит ли пользователь эту разницу в мс? |
Цитата:
|
Ещё самокат ))) ...:write:
function compare(arr1, arr2){ if(arr1.length !== arr2.length) return false; arr1.sort(); arr2.sort(); var i = Math.random(); return arr1.join(i) == arr2.join(i) ; }; var a = ['a','b','c','c'], c = ['b','c','a','a'], d = ['b','c','c','a']; alert([compare(a,c),compare(a,d)]); |
Часовой пояс GMT +3, время: 22:54. |