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