FindCountries

mail@pastecode.io avatar
unknown
javascript
a year ago
1.8 kB
8
Indexable
Never
const findCountries = async (keyword, region) => {
    const data = [];

    // Get data for first page
    // First page URL
    const url = `https://jsonmock.hackerrank.com/api/countries/search?region=${region}&name=${keyword}&page=1`;

    // Make GET request & get data for first page
    const response = await fetch(url);

    // Convert promise to JSON
    const JSONData = await response.json();

    // Extract data property from response JSON
    data.push(...JSONData.data);

    // Get data for 2nd page onwards if available
    for (let page = JSONData.page + 1; page <= JSONData.total_pages; page++) {
        // First page URL
        const url = `https://jsonmock.hackerrank.com/api/countries/search?region=${region}&name=${keyword}&page=${page}`;

        // Make GET request & get data for 2nd page and onwards
        const response = await fetch(url);

        // Convert promise to JSON
        const JSONData = await response.json();

        // Extract data property from response JSON
        data.push(...JSONData.data);
    }

    // Now data variable declared on first line contains all extracte data 
    // that we need for further processing
    // We will first sort data by population in increasing order and 
    // if two population are same then will further sort by it's name
    data.sort((a, b) => {
        return a.population !== b.population ?
            a.population - b.population :
            a.name.localeCompare(b.name);
    });

    // Map through sorted data and form string with 
    // Country name and it's poupaltion with a comma in between
    // Following will return =>  eg - ['countryName,population', 'countryName_2,population_2', ...]
    const result = data.map((item) => `${item.name},${item.population}`);

    return result;
};