چگونه می‌توان دو آرایه‌ را در جاوااسکریپت با هم مقایسه کرد؟

mohsen2 هفته قبل
ارسال شده در
javascript

مقایسه دو آرایه در جاوااسکریپت می‌تواند به چالش‌هایی منجر شود، زیرا عملگرهای مقایسه استاندارد مانند == یا === برای مقایسه آرایه‌ها به درستی عمل نمی‌کنند. این به دلیل این است که آرایه‌ها به عنوان اشیاء (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]);
```
    

به طور خلاصه، بسته به نیاز به مقایسه عمقی یا سطحی و نیز وجود یا عدم وجود کتابخانه‌های اضافی، می‌توانید روش مناسب را انتخاب کنید.

رای
0
ارسال نظر
مرتب سازی:
اولین نفری باشید که نظر می دهید!