در حال بارگزاری...
برگشت به بالا برگشت به بالا
background یافتن استان‌های همجوار و غیر همجوار ایران

یافتن استان‌های همجوار و غیر همجوار ایران

مقدمه: در این مطلب تابعی توضیح داده خواهد شد که توسط آن و در محیط جاوااسکریپت بتوانید استان‌های همجوار و غیر همجوار را پیدا کنید

در دسته بندی جاوا اسکریپت مطالعه در 5 دقیقه منتشر شده در ۱۳۹۹/۰۷/۰۹

سلام دوستان عزیز.

گاهی اوقات پیش می‌آید در برنامه‌های خود نیاز داشته باشیم استان‌های همجوار یا غیر همجوار را تشخیص دهیم. بعنوان مثال برای خود ما در پیاده سازی مجموعه فروشگاهی مانلی این سوال پیش آمده که چطور استان‌های همجوار و غیر همجوار را پیدا کنیم. خب همانطور که احتمالا می‌دانید هزینه ارسال محصولات توسط شرکت پست، توسط همین استان‌های همجوار و غیر همجوار محاسبه می‌شود.

پس تا انتهای این مطلب با ما همراه باشید تا بطور مفصل به این موضوع بپردازیم.

برای شروع کار به لیست اسم تمام استان‌های ایران نیاز داریم. پس برای تهیه این لیست من 31 متغیر از نوع const تشکیل دادم تا این مجموعه را تهیه کنم:

const azarShargh = 'آذربایجان شرقی',
    azarGharbi = 'آذربایجان غربی',
    ardebil = 'اردبیل',
    esfahan = 'اصفهان',
    alborz = 'البرز',
    ilam = 'ایلام',
    booshehr = 'بوشهر',
    tehran = 'تهران',
    charmahal = 'چهارمحال و بختیاری',
    khJnoobi = 'خراسان جنوبی',
    khRazavi = 'خراسان رضوی',
    khShomali = 'خراسان شمالی',
    khoozestan = 'خوزستان',
    zanjan = 'زنجان',
    semnan = 'سمنان',
    sistan = 'سیستان و بلوچستان',
    fars = 'فارس',
    ghazvin = 'قزوین',
    ghom = 'قم',
    kordestan = 'کردستان',
    kerman = 'کرمان',
    kermanshah = 'کرمانشاه',
    kohgelooye = 'کهگیلویه و بویراحمد',
    golestan = 'گلستان',
    gilan = 'گیلان',
    lorestan = 'لرستان',
    mazandaran = 'مازندران',
    markazi = 'مرکزی',
    hormozgan = 'هرمزگان',
    hamedan = 'همدان',
    yazd = 'یزد';

پس از تشکیل متغیر استان‌ها نیاز داریم تا در یک آرایه دو بعدی تک تک استان‌ها را با همسایه‌هایشان به برنامه بشناسانیم. پس برای این امر نیز می‌بایست آرایه دو بعدی زیر را با نام states و از نوع const تشکیل دهیم:

const states = [
    [
        azarShargh,
        ardebil,
        zanjan,
        azarGharbi,
    ],
    [
        azarGharbi,
        zanjan,
        kordestan,
        azarShargh
    ],
    [
        ardebil,
        gilan,
        zanjan,
        azarShargh
    ],
    [
        esfahan,
        semnan,
        ghom,
        markazi,
        lorestan,
        charmahal,
        fars,
        yazd,
    ],
    [
        alborz,
        tehran,
        ghazvin,
        mazandaran,
    ],
    [
        ilam,
        kermanshah,
        lorestan,
        khoozestan,
    ],
    [
        booshehr,
        fars,
        kohgelooye,
        khoozestan,
    ],
    [
        tehran,
        mazandaran,
        semnan,
        ghom,
        markazi,
        alborz,
    ],
    [
        charmahal,
        esfahan,
        lorestan,
        khoozestan,
        kohgelooye,
    ],
    [
        khJnoobi,
        khRazavi,
        yazd,
        kerman,
        sistan,
    ],
    [
        khRazavi,
        khShomali,
        semnan,
        yazd,
        khJnoobi,
    ],
    [
        khShomali,
        golestan,
        semnan,
        khRazavi,
    ],
    [
        khoozestan,
        ilam,
        lorestan,
        charmahal,
        kohgelooye,
    ],
    [
        zanjan,
        azarShargh,
        kordestan,
        hamedan,
        azarGharbi,
        ghazvin,
        gilan,
        ardebil,
    ],
    [
        semnan,
        mazandaran,
        tehran,
        ghom,
        esfahan,
        yazd,
        khRazavi,
        khShomali,
        golestan,
    ],
    [
        sistan,
        khJnoobi,
        kerman,
        hormozgan,
    ],
    [
        fars,
        hormozgan,
        kerman,
        yazd,
        esfahan,
        booshehr,
        kohgelooye,
    ],
    [
        ghazvin,
        zanjan,
        hamedan,
        markazi,
        alborz,
        mazandaran,
        gilan,
    ],
    [
        ghom,
        tehran,
        semnan,
        esfahan,
        markazi,
    ],
    [
        kordestan,
        azarGharbi,
        zanjan,
        hamedan,
        kermanshah,
    ],
    [
        kerman,
        sistan,
        khJnoobi,
        yazd,
        fars,
        hormozgan,
    ],
    [
        kermanshah,
        kordestan,
        hamedan,
        lorestan,
        ilam,
    ],
    [
        kohgelooye,
        khoozestan,
        ilam,
        lorestan,
        charmahal,
        esfahan,
        fars,
        booshehr,
    ],
    [
        golestan,
        khShomali,
        semnan,
        mazandaran,
    ],
    [
        gilan,
        ardebil,
        zanjan,
        ghazvin,
        mazandaran,
    ],
    [
        lorestan,
        ilam,
        kermanshah,
        hamedan,
        markazi,
        esfahan,
        charmahal,
        khoozestan,
    ],
    [
        mazandaran,
        golestan,
        semnan,
        tehran,
        alborz,
        ghazvin,
        gilan,
    ],
    [
        markazi,
        hamedan,
        ghazvin,
        tehran,
        ghom,
        esfahan,
        lorestan,
    ],
    [
        hormozgan,
        fars,
        kerman,
        sistan,
    ],
    [
        hamedan,
        kordestan,
        zanjan,
        ghazvin,
        markazi,
        lorestan,
        kerman,
    ],
    [
        yazd,
        semnan,
        khRazavi,
        khJnoobi,
        kerman,
        fars,
        esfahan,
    ]
];

کار تقریبا تمام است. حال لازم است تابعی داشته باشیم که دو استان را بعنوان ورودی (آرگومان) به آن بدهیم و در نهایت با برگرداندن مقادیر true یا false، وضعیت همسایگی این دو استان را برای ما مشخص نماید. اما قبل از اینکه این تابع را تشکیل دهیم، نیاز به تابع دیگری داریم که توسط آن تمام استان‌های همجوار یک اتان خاص را پیدا کنیم. پس ابتدا به این تابع می‌پردازیم.

برای تشکیل این تابع می‌توان از راه حل زیر استفاده نمود:

function findNeighbor(state) {
    for (let i = 0; i <= states.length; i++)
        if (states[i][0].includes(state))
            return states[i];
}

توسط این تابع است که می‌توانیم یک استان را بعنوان آرگومان ورودی بدهیم و سپس تمام استان‌های همجوار آن را پیدا کنیم. حال به همان تابعی که چند خط بالاتر گفتیم می‌رسیم. یعنی یک تابع که دو استان را بگیرد و true (به معنای همجوار بودن) یا false (به معنای غیر همجوار بودن) را برگرداند. این تابع را بصورت زیر می‌نویسیم:

function isNeighbor(state1, state2) {
    let state = [],
        status = false;
    state.push(findNeighbor(state1));
    for (let i = 0; i < state.length; i++)
        if (state[i].includes(state2))
            status = true;
    return status;
}

توجه داشته باشید که کار کردن با این توابع بسیار ساده است. ما تا به اینجای کار دو تابع نوشتیم که در زیر مثال هایی از آن را با هم مرور می‌کنیم.


1. تابع findNeighbor:

findNeighbor('تهران');
// output: 'تهران','مازندران', 'سمنان', 'قم', 'مرکزی', 'البرز'

2. تابع isNeighbor:

isNeighbor('تهران', 'خراسان رضوی');
//output: false
isNeighbor('تهران', 'مرکزی');
//output: true
if (isNeighbor('تهران', 'قم'))
    console.log('همجوار');
else
    console.log('غیر همجوار');
//output: 'همجوار'

حرف آخر:

توسط آن 31 متغیری که در ابتدا مشخص کردیم و آن آرایه دو بعدی و توابع findNeighbor و isNeighbor می‌توانیم چندین تابع دیگر با کمی خلاقیت بنویسیم. برای تمرین سعی کنید تابعی بنویسید که یک استان را بعنوان آرگومان ورودی دریافت کند و سپس تمام استان‌های غیر همجوار را برگرداند.

همچنین توجه داشته باشید که می‌توان این مجموعه کدها را به کشورهای دیگر تعمیم بدهیم. بعنوان تمرین سعی کنید کشور آمریکا را مورد بررسی قرار دهید.

در نهایت از تمام شما عزیزان متشکریم که تا انتهای این آموزش همراه ما بودید.

به امید دیدار...

منبع (منابع) مورد استفاده:

بدون منبع

جدیدترین محصولات دلاویز:

مرتبط‌ترین مقالات برای شما:

چرا باید جاوا اسکریپت یاد بگیرم؟ جاوا اسکریپت

چرا باید جاوا اسکریپت یاد بگیرم؟

حمیدرضا غفوری

برنامه نویس

جاوا اسکریپت یه زبان برنامه نویسی متن بازه. در این مطلب اون رو بررسی میکنیم

© کلیه حقوق این وب‌سایت متعلق به شرکت رایانش هوشمند بنیان مانلی است و هرگونه کپی‌برداری از پروژه‌ها به‌منظور احقاق حقوق مشتریان، پیگرد قانونی در پی دارد.