MooToolsを利用したJavaScriptのオブジェクトの比較

素のJavaScriptではオブジェクトが同じ内容かどうかを調べるのはけっこうめんどうだが、MooToolsを利用してObject.toQueryStringで文字列に変換して比較すると楽。

objA = { a: 1, b: 2 };
objB = { a: 1, b: 2 };
if (Object.toQueryString(objA) === Object.toQueryString(objB)) {
  // a=1&b=2 === a=1&b=2
}

しかしキーの順番が違うと残念ながら以下のようになる。

objA = { a: 1, b: 2 };
objB = { b: 2, a: 1 };
if (Object.toQueryString(objA) === Object.toQueryString(objB)) {
  // a=1&b=2 === b=2&a=1 残念!
}

ということでキーをソートしてから比較すれば間違いない。

objA = { a: 1, b: 2 };
objB = { b: 2, a: 1 };
objA = Object.subset(objA, Object.keys(objA).sort());
objB = Object.subset(objB, Object.keys(objB).sort());
if (Object.toQueryString(objA) === Object.toQueryString(objB)) {
  // a=1&b=2 === a=1&b=2
}

オブジェクトのキーがソートできればJSONに変換して比較してもいい。

パフォーマンスの話とかは知りませんが。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL