Код в в этом ответе не различает примеры в:
javascript:
function sameRAs(newArray,entry){
return newArray.length == entry.length &&
newArray.join('/') == entry.join('/')};
alert( sameRAs( [1,'2/3',4], [1,2,'3/4'] ) ? 'same' : 'different' );
alert( sameRAs( [null], [,] ) ? 'same' : 'different' );
Чтобы увидеть, что [null]
и [,]
действительно разные, рассмотрим:
javascript: alert( [null][0] ); alert( [,][0] );
, которые отображают null
и undefined
соответственно.
Составной массив может проверять идентичность массива! с ==
для идентичных массивов!
javascript:
ra=[1,2,3]; ar=[4]; r=[]; composite=[ar,r,ra,ar,ra];
for(i in composite)
if(composite[i]==ra)
alert( JSON.stringify(composite) +' at ['+ i +']'+' == ['+ ra +']')
отображает:
[[4],[],[1,2,3],[4],[1,2,3]] at [2] == [1,2,3]
и
[[4],[],[1,2,3],[4],[1,2,3]] at [4] == [1,2,3]
Пока я голосую за .toSource () (& Mozilla), простые массивы можно сравнивать с помощью JSON.
javascript:
ra=[1,2,3]; ar=[1,2,3];
alert([ ra==ar, JSON.stringify(ra)==JSON.stringify(ar) ]);
отображает false,true
.
Еще одна морщина: круговые массивы. Сравнивать их сложно, вот где светится .toSource ().
javascript:
ra = [0,1,2]; ra[3] = ra; r2d2 = #2= [0,1,2,#2#];
alert([ ra==r2d2, ra.toSource() == r2d2.toSource() ])
отображает false,true
(в FireFox).
Относительно эффективности машины: вычислительные затраты незначительны по сравнению с затратами, затраченными на человеческое время. Компьютеры здесь, чтобы уменьшить человеческий труд, а не наоборот. Действительно вычислительно дорогие и широко развернутые вычисления могут потребовать больших инвестиций в человеческий труд для достижения эффективности. Это не один из тех времен.
Простота .toSource () может окупиться, если установить FF как прагматичный подход к решению таких проблем, как этот. Масштаб проблемы часто означает принуждение окружающей среды и машин к решению проблемы, а не человеческому труду.