Junior
Ինչպե՞ս կարելի է համեմատել օբյեկտները JavaScript-ում։
sobes.tech AI
Պատասխան AI-ից
JavaScript- ում ուղղակի համեմատությունը === կամ == նշում է հղումների նույնությունը, ոչ թե դրանց պարունակության հավասարությունը։ Օբյեկտների պարունակության համեմատության համար կան հետևյալ մոտեցումները՝
-
Ապակողմնային համեմատություն:
- Ստուգում է, արդյոք առաջին մակարդակի բանալիները և արժեքները համընկնում են։
- Կիրառվում է «փափուկ» օբյեկտների համար առանց ներսի օբյեկտների կամ զանգվածների։
- Կարող է ձեռքով իրականացնել՝ անցնելով բանալիներով կամ օգտագործելով
Object.keys()ևevery()։
// Օրինակ ապակողմնային համեմատության 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; }; -
Ամբողջական համեմատություն:
- Ռեկուրսիվ ստուգում է բոլոր մակարդակների ներսի օբյեկտներն ու զանգվածները։
- Պահանջվում է բարդ կառուցվածքների ճիշտ համեմատության համար։
- Կարող է օգտագործել ռեկուրսիա կամ ինքդ՝ օգտագործելով ստեկ։
- Պահանջում է տարբեր տիպերի տվյալների մշակում (պրիմիտիվներ, օբյեկտներ, զանգվածներ, ամսաթվեր, կանոնավոր արտահայտություններ):
-
Համեմատություն
JSON.stringify()-ի միջոցով:- Օբյեկտները վերածում է JSON տողերի և համեմատում այդ տողերը։
- Պարզ միջոց է, բայց ունի սահմանափակումներ՝
- Չհաշվում է բանալիների կարգը օբյեկտներում։
- Չամշակում է ֆունկցիաներ,
undefined,NaN,Infinity։ - Կարող է լինել անարդյունավետ շատ մեծ օբյեկտների համար։
// Օրինակ համեմատություն `JSON.stringify()`-ով const areEqualJSON = (obj1, obj2) => { return JSON.stringify(obj1) === JSON.stringify(obj2); }; -
Երրորդ կողմի գրադարանների օգտագործում:
- Գրադարաններ ինչպիսիք են
lodash(ֆունկցիա_.isEqual) կամdeep-equalառաջարկում են հուսալի և օպտիմիզացված իրականացման տարբերակներ՝ հաշվի առնելով բազմաթիվ նրբություններ (շրջանառվող հղումներ, տարբեր տիպեր, եզրային դեպքեր):
- Գրադարաններ ինչպիսիք են
Ընտրությունը կախված է համեմատության անհրաժեշտ ճշգրտությունից և համեմատվող օբյեկտների բարդությունից։ Պարզ դեպքերում բավական է ապակողմնային համեմատությունը կամ JSON.stringify()-ը։ Մարդկային և բարդ կառուցվածքների համար խորհուրդ է տրվում օգտագործել խորը համեմատություն կամ պատրաստի գրադարաններ։