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に変換して比較してもいい。

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