オブジェクトや配列を再帰的にチェックしていくのは面倒
片方のプロパティ全部をもう片方と全部比較しても もう片方のほうにしか無いプロパティもあったり 考慮することが意外とあってコードも長くなる
短く書きたかったので オブジェクトは Object.entries の形式化してソートするだけ
比較は JSON.stringify した文字列比較に任せる方針なもの作ってみた
const rec = v =>
(v instanceof Object && !Array.isArray(v)) ?
Object.entries(v).map(x => [x[0], rec(x[1])]).sort((a, b) => a[0].localeCompare(b[0]))
:
v
const jsonDiff = (a, b) =>
JSON.stringify(rec(a)) === JSON.stringify(rec(b))
jsonDiff({a: 1, b: 2}, {b: 2, a: 1})
// true
JSON.stringify({a: 1, b: 2}) === JSON.stringify({b: 2, a: 1})
// false
JSON を比較するくらい標準機能にあってもいいと思うのに