Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

ブラウザで動作するJavaScriptのdeepEquals(不完全)を書いたけど、fast-deep-equalを使います

(不完全)と前置きする感じ、弱気である。

雑にdeepEqualsしたい、という要件があったので。
npmにはもちろん上がっているけど、ブラウザでちょっと試しに使いたい感じだったので、ググってすぐ見つからなかったので書いた。

対応しているのは、null,undefined,number,string,object,array。
(boolean同士がない事に気づく。「こんなん書かなくてもあってるでしょ」とタカをくくって書いてないですね・・・よくない・・・)

2019-03-26時点のモダンなEdge,Chrome,Firefoxでエラーが出てないことは確認。Safari、モバイルは知らない。
雰囲気で適当なテストを書きながら実装してたので、テストしてないパターンありそう。

Functionからインスタンスを作る感じのやつも多分大丈夫だけど、Functionを作ってるようなものは無理かもしれない。
NaNとかSymbolとかは見てない。循環参照も知らない。こちらからすれば、そんな汚いオブジェクトを作る方が悪い。

他を見てみましょう

こういう書いた系は、いつもある程度満足いくところまで実装してから他の実装見ています。なぜ逆にしないのか。

Node 実装

最初はnodejs実装を参考にしようとしたけど、なんかめんどくさそうだったので諦めた。

NodeJSの実装は以下。setを持ちまわる感じ、循環参照を考慮してる感はある。Symbolも見てるっぽい。よくわからない。

fast-deep-equal

code: https://github.com/epoberezkin/fast-deep-equal/blob/master/index.js

こちらは1300万DL/weekな実装。テストか何かの依存なんだろうか
何度もオブジェクトを辿らないようにしたり、varを1回で済ませてたり、何度もvarしないように頑張っている感がある。コンパクトだし読みやすい。
export等を削れば自分が用意したテストケースでブラウザ上でも動いた。本番で使うならこっち使います。

node-deep-equal

code: https://github.com/substack/node-deep-equal/blob/master/index.js

こちら600万DL/weekな実装。名前は一番良い。でもDate型とかも見てるし、なんか読みにくく感じてあまり見てない。

他にもあるみたいだけどどんぐりの背比べのような気がしたので見てない。

真のdeepEqualsを見せてくれる方を募集しております。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?