چگونه میتوان دو آرایه را در جاوااسکریپت با هم مقایسه کرد؟
مقایسه دو آرایه در جاوااسکریپت میتواند به چالشهایی منجر شود، زیرا عملگرهای مقایسه استاندارد مانند ==
یا ===
برای مقایسه آرایهها به درستی عمل نمیکنند. این به دلیل این است که آرایهها به عنوان اشیاء (Objects) در جاوااسکریپت شناخته میشوند و یک مقایسه برای بررسی معادل بودن آنها فقط به بررسی اشارهگرهای آنها میپردازد.
برای مقایسه درست آرایهها میتوان از چندین روش استفاده کرد:
مقایسه کامل:
```javascript
Array.prototype.equals = function(array) {
if (!array) return false;
if (this === array) return true;
if (this.length !== array.length) return false;
for (var i = 0; i < this.length; i++) {
if (this[i] instanceof Array && array[i] instanceof Array) {
if (!this[i].equals(array[i])) return false;
} else if (this[i] !== array[i]) {
return false;
}
}
return true;
}
```
با این متد میتوان آرایهها را بدون نیاز به تبدیل به رشته مقایسه کرد.
مقایسه سطحی:
اگر فقط به مقایسه سطحی (shallow equality) نیاز دارید، میتوانید از کدنویسی مختصر استفاده کنید:
```javascript
const areEqual = (array1, array2) =>
array1.length === array2.length && array1.every((value, index) => value === array2[index]);
```
این روش تنها مقادیر اصلی (scalar) را بررسی میکند.
کتابخانههای خارجی:
استفاده از کتابخانههایی مانند Lodash
یا Underscore
میتواند فرآیند مقایسه را بسیار ساده کند. با استفاده از متد _.isEqual
میتوان به سادگی آرایهها و اشیاء را مقایسه کرد:
```javascript
_.isEqual(array1, array2);
```
توجه داشته باشید که ترتیب عناصر در آرایهها مهم است و اگر ترتیب متفاوت باشد، نتیجه false
خواهد بود.
مرتبسازی قبل از مقایسه آرایهها:
در مواردی که ترتیب اهمیت ندارد، میتوانید آرایهها را مرتب کرده و سپس مقایسه کنید:
```javascript
const areEqual = (array1, array2) =>
array1.length === array2.length &&
array1.slice().sort().every((value, index) => value === array2.slice().sort()[index]);
```
به طور خلاصه، بسته به نیاز به مقایسه عمقی یا سطحی و نیز وجود یا عدم وجود کتابخانههای اضافی، میتوانید روش مناسب را انتخاب کنید.