Цитата:
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, время: 02:13. |