[JavaScript]配列の比較

JavaScriptで、配列の比較の際に==又は===演算子を用いると、その配列が参照しているメモリ上のアドレスが同じかどうか、でtrue/falseを返します。したがって、

var array1 = [1, 2, 3];
var array2 = [1, 2, 3];
console.log( array1 == array2 ); // FALSE!!!

という結果になります。配列の値と値の順番が等しいか比較する方法として一番簡単なのは、toStringメソッドで文字列に変換して比較することです。

var array1 = [1, 2, 3];
var array2 = [1, 2, 3];
console.log( array1.toString() == array2.toString() ); // true
// ↑の3行目の処理を詳しく書くと、以下のような流れ。
var string1 = array1.toString(); // 配列[1,2,3]を文字列"1,2,3"に変換
var string2 = array2.toString(); // 配列[1,2,3]を文字列"1,2,3"に変換
console.log( string1 == string2 ); // "1,2,3"と"1,2,3"は同値なのでtrue

配列を頭からループで回して、値を比較するというのもOKです。

var ary1 = [1, 2, 3];
var ary2 = [1, 2, 3];
var isEqual = true;
for (var i = 0; i < ary1.length; i++) {
if (ary1[i] !== ary2[i]) {
isEqual = false;
}
}
console.log( isEqual ); // true

オブジェクトの比較の際も同様の問題が発生しますが、オブジェクトの場合はより事情が複雑なので、機会があればまた今度。。。

オブジェクトの比較で参考になりそうなリソース:http://blog.livedoor.jp/dankogai/archives/51859373.html

コメントを残す

コメントを残す