Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Почему массивы не равны (https://javascript.ru/forum/css-html/73586-pochemu-massivy-ne-ravny.html)

dakociha 26.04.2018 16:53

Почему массивы не равны
 
function range() {
var str = [];
var a = 5, b = 2, c = -1;
for (a; a >= b; a += c) {
str.push(a);
}
return str;
}

var str23 = [5, 4, 3, 2];
console.log(range() == str23);

j0hnik 26.04.2018 16:56

для такого сравнения true вернется только если обе переменные ссылаются на один объект

j0hnik 26.04.2018 16:58

alert([1,2]==[1,2])


a = [1,2]
b=a;
alert(a==b)

dakociha 26.04.2018 16:59

А как сравнить равен ли получeнный массив [5, 4, 3, 2]?( str == [5, 4, 3, 2])

dakociha 26.04.2018 17:01

Дело в этом:
it("range() should return [5, 4, 3, 2]", function() {
assert.equal( range(), [5, 4, 3, 2] );
});

j0hnik 26.04.2018 17:01

func=(a,b)=>{
b=b.sort();
	return a.length == b.length?
	
	a.sort().every((el,i)=>el == b[i]):false;
};
alert(func([12, 5, 8, 44, 130,],[12, 5, 8, 130, 44]));

Dilettante_Pro 26.04.2018 17:02

А вот так сравнятся - если одинаковые по значениям и по последовательности
function range() {
var str = [];
var a = 5, b = 2, c = -1; 
for (a; a >= b; a += c) {
str.push(a); 
}
return str;
}

var str23 = [5, 4, 3, 2];
alert(JSON.stringify(range()) == JSON.stringify(str23));

Dilettante_Pro 26.04.2018 17:14

Если нужно сравнить по значениям, независимо от последовательности
function range() {
var str = [];
var a = 5, b = 2, c = -1; 
for (a; a >= b; a += c) {
str.push(a); 
}
return str;
}

var str23 = [5, 4, 2, 3];
alert(JSON.stringify(range().sort()) == JSON.stringify(str23.sort()));

j0hnik 26.04.2018 17:20

alert(''+[1,2]==[1,2]+'')

Dilettante_Pro 26.04.2018 18:10

j0hnik,
alert('1,2'==[1,2]+'')

:)

alert(JSON.stringify('1,2') == JSON.stringify([1,2]));


Часовой пояс GMT +3, время: 22:13.