JavaScriptの配列は結合して比較する

Pocket

次のように変数のaとbに配列[1, 2, 3]を代入します。
aとbは同じはずですが、比較するとなぜかfalseになります。

var a, b;
a = [1, 2, 3];
b = [1, 2, 3];
document.write(a == b);//false

配列の比較は次のように一つずつチェックする方法が考えられます。
面倒です。

var a, b;
a = [1, 2, 3];
b = [1, 2, 3];
document.write(array_compare(a, b));
function array_compare(a, b) {
  var i;
  if(a.length != b.length) {
    return false;
  } else {
    for(i = 0; i < a.length; i++) {
      if(a[i] != b[i]) {
        return false;
      }
    }
    return true;
  }
}

そこで次のようにjoinで結合して比較します。

var a, b;
a = [1, 2, 3];
b = [1, 2, 3];
document.write(a.join() == b.join());//true

「a.join() == b.join()」は「"1,2,3" == "1,2,3"」ですのでtrueとなります。
「a.toString() == b.toString()」としても同じです。

ただし次のような意地悪なケースはダメです。

var a, b;
a = ["1", "2,3"];
b = ["1,2", "3"];
document.write(a == b);//false
document.write(a.join() == b.join());//true

aとbは明らかに違いますが、結合すると両方とも「1,2,3」になってしまうからです。
このような場合は「join("x")」など適当な文字で挟むのがよいかもしれません。

[ 2014年8月14日 | カテゴリー: JavaScript | タグ: , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報