Цитата:
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)]); |
Цитата:
И в минусы можно записать, что модифицируются исходные массивы. |
Цитата:
|
Цитата:
var a = ['1','2,3'].join(), b = ['1,2','3'].join(); alert(a == b) var a = ['1','23'].join(''), b = ['12','3'].join(''); alert(a == b) |
Ну да, логично.
|
join() без параметров соединяет запятыми! Это МЕДЛЕННЕЕ чем соединять пустой строкой!
|
Цитата:
Причина не в этом, рони уже всё объяснил. И вообще, я считаю, что тему пора закрывать. |
Цитата:
Цитата:
p.s.: очень часто наблю даю забавную ситуацию: товарищ по нику Livaanderiamarum делает какое-либо голословное утверждение, и его опровергают в следующем же посте :) Цитата:
Цитата:
|
я тоже это наблюдаю)
|
Цитата:
|
Gozar, я просто открываю IE8 и кликаю по кнопке запустить из вашего поста. Тут сложно сделать что-либо неправильно)
|
Цитата:
Цитата:
Быть упрямым не кавайно. |
Цитата:
Цитата:
Цитата:
|
Все проще простого.
function array_equal ( a, b ) { if ( a.length != b.length ) return false; a.sort(); b.sort(); for ( var i in a ) { if ( a[i] != b[i] ) return false; } return true; }; |
Цитата:
function array_equal ( a, b ) { if ( a.length != b.length ) return false; a.sort(); b.sort(); for ( var i in a ) { if ( a[i] != b[i] ) return false; } return true; }; alert(array_equal([1,2], ['1','2'])); |
некропостинг :)
EmperioAf, даже этого не надо. Я дальше a.sort(); b.sort(); не читал, т.к. порядок элементов в массиве измениться. |
function array_equal ( a, b ) { return a.join('\n&\n') == b.join('\n&\n') ; } |
Deff,
:-? function array_equal ( a, b ) { return a.join('\n&\n') == b.join('\n&\n') ; } var a; alert([array_equal ( [a], [] ),[a].length,[].length]); alert(array_equal ( ['1'], [[1]] )); |
var a = [1,2,3]; var b = [1,2,3]; var c = [[1,2,3]]; alert(JSON.stringify(a) == JSON.stringify(b)); alert(JSON.stringify(a) == JSON.stringify(c)); |
Poznakomlus,
alert(JSON.stringify([Array]) === JSON.stringify([null])); |
nerv_, согласен +(не могу)
var a = [1,2,3]; var b = [1,2,3]; var c = []; var d = [Array]; var e =[null]; function array_equal ( a, b ) { return a.every(function(el, i){ return el === b[i]; }, b); } alert(array_equal ( a, b )); alert(array_equal ( a, c )); alert(array_equal ( d, e )); |
Poznakomlus,
var a = [1,2,3]; var b = [1,2,3,4,5,6]; function array_equal ( a, b ) { return a.every(function(el, i){ return el == b[i]; }, b); } alert(array_equal ( a, b )); |
Не внимателен в последнее время :thanks:
var a = [1, 2, 3]; var b = [1, 2, 3, 4, 5, 6]; var c = [1, 2, 3, 4, 5, 6]; function array_equal(a, b) { return a.length == b.length ? a.every(function (el, i) { return el === b[i]; }, b) : false; } alert(array_equal(a, b)); alert(array_equal(c, b)); |
рони,
Мну тупо про простой массив, без переменных [1,2,3,"b","c"] ====== Почитал первопост, и чуть дальше понял, чо хотят премудростей... ну нафиг... |
arrayEqual = (arr1,arr2)-> i = arr1.length myBool while(i--) if arr1[i] == arr2[i] myBool = true else i = 0 myBool = false return myBool |
[1,2,3].toString() === '1,2,3'
let arr1=[1,2,3,4,5];
let arr2=[2,1,4,5,3]; console.log(arr1.sort().toString()==arr2.sort().to String());// true |
Jekshmek,
:-? а тему прочитать? можно отсюда https://javascript.ru/forum/misc/247...tml#post150022 и далее alert([1,"2,3"].toString() === [1,2,3].toString()); |
Для строк нормальный вариант во всей теме только этот.
А не для строк, увы, не всё так просто: a={a:1}; b={b:2}; arr1 = [2, 3, a, b, 1]; arr2 = [2, 3, b, a, 1]; alert(JSON.stringify( [arr1.sort(), arr2.sort()] ,0,'\t')) |
func=(a,b)=>{ b=b.sort(); return !a.sort().some((el,i)=>el !== b[i]); }; alert(func([12, 5, 8, 44, 130,],[12, 5, 8, 130, 44])); |
j0hnik,
где сравнение length и может every вместо some |
|
Часовой пояс GMT +3, время: 19:58. |