مرتب‌سازی آرایه‌ای از اشیا بر اساس مقدار یک پراپرتی در جاوااسکریپت

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

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

برای مرتب‌سازی آرایه می‌توانیم از تابع sort در جاوا اسکریپت استفاده کنیم. این تابع به یک تابع مقایسه‌ کننده نیاز دارد که دو آیتم آرایه را بعنوان ورودی دریافت می کند و بر اساس قیمت آن‌ها مقداری را برمی‌گرداند. تفسیر مقادیر بازگشتی تابع مقایسه گر به شرح زیر است:

  1. اگر مقدار بزرگتر از صفر بازگرداند یعنی a باید بعد از b قرار بگیرد.
  2. اگر مقدار کمتر از صفر برگرداند یعنی a باید قبل از b قرار بگیرد
  3. اگر صفر برگرداند یعنی ترتیب a و b باید به همین شکل حفظ شود.

مرتب‌سازی صعودی

      homes.sort(function(a, b) {
    return a.price - b.price;
});

    

در نسخه‌های جدیدتر جاوا اسکریپت، می‌توانیم از سینتکس ES6 استفاده کنیم:

      homes.sort((a, b) => a.price - b.price);

    

مرتب‌سازی نزولی

برای مرتب‌سازی به صورت نزولی، تنها کافیست ترتیب مقایسه را معکوس کنیم:

      homes.sort((a, b) => b.price - a.price);

    

نسخه انعطاف‌پذیر برای مرتب‌سازی

اگر می‌خواهید قابلیت‌های بیشتری در مرتب‌سازی داشته باشید، می‌توانید تابعی بسازید که به شما اجازه می‌دهد بر اساس هر خاصیتی مرتب کنید. کد زیر یک مثال از چنین تابعی است:

      const sort_by = (field, reverse, primer) => {
    const key = primer ? function(x) {
        return primer(x[field]);
    } : function(x) {
        return x[field];
    };

    reverse = !reverse ? 1 : -1;

    return function(a, b) {
        a = key(a), b = key(b);
        return reverse * ((a > b) - (b > a));
    }
}

// برای مرتب‌سازی بر اساس قیمت به صورت نزولی
console.log(homes.sort(sort_by('price', true, parseFloat)));

// برای مرتب‌سازی بر اساس شهر به صورت صعودی و بدون حساسیت به حروف بزرگ و کوچک
console.log(homes.sort(sort_by('city', false, (a) => a.toUpperCase())));

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