Junior
Kaip palyginti objektus JavaScript?
sobes.tech AI
Atsakymas iš AI
JavaScript tiesioginis palyginimas === arba == tikrina nuorodų identiškumą, o ne jų turinio lygybę. Objektų turinio palyginimui yra šie požiūriai:
-
Oberflächliches palyginimas:
- Patikrina, ar pirmojo lygio raktai ir reikšmės sutampa.
- Taikoma "plokštiems" objektams be įdėtų objektų ar masyvų.
- Gali būti įgyvendinta rankiniu būdu pereinant per raktus arba naudojant
Object.keys()irevery().
// Pavyzdys paviršinio palyginimo const areEqualShallow = (obj1, obj2) => { const keys1 = Object.keys(obj1); const keys2 = Object.keys(obj2); if (keys1.length !== keys2.length) { return false; } for (let key of keys1) { if (obj1[key] !== obj2[key]) { return false; } } return true; }; -
Gilus palyginimas:
- Rekursyviai tikrina visas įdėtų objektų ir masyvų lygius.
- Reikalingas sudėtingų duomenų struktūrų teisingam palyginimui.
- Gali naudoti rekursiją arba iteratyvų metodą su naudojimu steko.
- Reikalauja apdoroti įvairių duomenų tipų (primitivų, objektų, masyvų, datų, reguliarių išraiškų).
-
Palyginimas naudojant
JSON.stringify():- Paverčia objektus į JSON eilutes ir lygina šias eilutes.
- Paprastas būdas, bet turi apribojimų:
- Nesižvelgia į raktų tvarką objektuose.
- Nenaudoja funkcijų,
undefined,NaN,Infinity. - Gali būti neefektyvus labai dideliems objektams.
// Pavyzdys palyginimo per `JSON.stringify()` const areEqualJSON = (obj1, obj2) => { return JSON.stringify(obj1) === JSON.stringify(obj2); }; -
Naudojant trečiųjų šalių bibliotekas:
- Bibliotekos kaip
lodash(funkcija_.isEqual) arbadeep-equalsiūlo patikimus ir optimizuotus giluminio palyginimo įgyvendinimus, atsižvelgiant į daugybę niuansų (ciklinės nuorodos, skirtingi tipai, kraštiniai atvejai).
- Bibliotekos kaip
Pasirinkimas priklauso nuo reikalingo tikslumo ir palyginamų objektų sudėtingumo. Paprastiems atvejams pakanka paviršinio palyginimo arba JSON.stringify(). Sudėtingoms struktūroms rekomenduojama naudoti giluminį palyginimą arba paruoštas bibliotekas.