aiscript
aiscript copied to clipboard
循環構造をサポートするdeep-equal関数
What
循環構造をサポートするdeep-equalを実装。 連想配列で必要になりそうなのでひとまず追加。 標準ライブラリ等でも使えそう。
~~少し怪しい部分があるので考えたい~~
Why
Additional info (optional)
良さそう
constructorとか怪しいかも あと特殊なやつってあったっけ
(Mapなどではない)通常のオブジェクトに任意のキーでユーザーがアクセスすることがなければ大丈夫そうかも
equal({ a: 1 }, { a: 1, b: 2 })
のように、オブジェクト同士の比較で後者が前者の要素全部+αを持っている時に偽陽になってしまうようです
怪しいのというと
let a, b, c;
a = { b };
b = { c };
c = { a };
let x = { a };
let y = { a: { b } };
equal(x, y); // false
が微妙ですね
怪しいのというと
let a, b, c; a = { b }; b = { c }; c = { a }; let x = { a }; let y = { a: { b } }; equal(x, y); // false
が微妙ですね
これ修正されてませんか?
あれ動かない...謎
あ、テストケースが間違ってますね
a = { b };
の時点ではbはundefinedです 多分
これだと動きました
let a: any, b: any, c: any;
a = { b };
b = { c };
a.b = b;
c = { a };
b.c = c;
let x = { a };
let y = { a: { b } };
console.log(deepEqual(x, y)); // true
これだと動きました
let a: any, b: any, c: any; a = { b }; b = { c }; a.b = b; c = { a }; b.c = c; let x = { a }; let y = { a: { b } }; console.log(deepEqual(x, y)); // true
確認できました
let a=[{a:[]}]
let b=[{a:[]}]
a[0].a[0]=a
b[0].a[0]=b[0]
deepEqual(a,b) // true
になるみたいです
循環の判定方法にバグがあるかも 両方が循環した位置だけでは一致を判断できないかも?