Доступ к элементам массива в массиве объектов — JavaScript

#javascript #arrays #web

#javascript #массивы #веб

Вопрос:

Итак, я пытаюсь получить элементы из JSON объектов, например, данные JSON:

 [
  {
    "infected": 55630,
    "tested": "NA",
    "recovered": 38788,
    "deceased": 1897,
    "country": "Algeria",
    "moreData": "https://api.apify.com/v2/key-value-stores/pp4Wo2slUJ78ZnaAi/records/LATEST?disableRedirect=true",
    "historyData": "https://api.apify.com/v2/datasets/hi0DJXpcyzDwtg2Fm/items?format=jsonamp;clean=1",
    "sourceUrl": "http://covid19.sante.gov.dz/carte",
    "lastUpdatedSource": "2020-10-23T15:00:00.000Z",
    "lastUpdatedApify": "2020-10-24T12:00:00.000Z"
  },
  {
    "infected": null,
    "tested": null,
    "recovered": null,
    "deceased": null,
    "country": "Austria",
    "moreData": "https://api.apify.com/v2/key-value-stores/RJtyHLXtCepb4aYxB/records/LATEST?disableRedirect=true",
    "historyData": "https://api.apify.com/v2/datasets/EFWZ2Q5JAtC6QDSwV/items?format=jsonamp;clean=1",
    "lastUpdatedApify": "2020-11-07T20:30:00.000Z"
  }
]
  

Я ищу, чтобы получить максимальное количество стран X, но только там имя. Кто-нибудь может помочь

 function topXCountriesCasesName(num)
{
    let countriesCases
    
    let sortedCovidData = covid19JSON.sort((a,b)=> b.infected  - a.infected )
    
    for(let i = 0; i < num; i   )
    {
        countriesCases.push(sortedCovidData.get(i).get(4))
    }
    
    return countriesCases
    
}
  

Ответ №1:

Вам не нужно использовать .get :

 const covid19JSON = [
  {
    "infected": 55630,
    "tested": "NA",
    "recovered": 38788,
    "deceased": 1897,
    "country": "Algeria",
    "moreData": "https://api.apify.com/v2/key-value-stores/pp4Wo2slUJ78ZnaAi/records/LATEST?disableRedirect=true",
    "historyData": "https://api.apify.com/v2/datasets/hi0DJXpcyzDwtg2Fm/items?format=jsonamp;clean=1",
    "sourceUrl": "http://covid19.sante.gov.dz/carte",
    "lastUpdatedSource": "2020-10-23T15:00:00.000Z",
    "lastUpdatedApify": "2020-10-24T12:00:00.000Z"
  },
  {
    "infected": 55632,
    "tested": null,
    "recovered": null,
    "deceased": null,
    "country": "Austria",
    "moreData": "https://api.apify.com/v2/key-value-stores/RJtyHLXtCepb4aYxB/records/LATEST?disableRedirect=true",
    "historyData": "https://api.apify.com/v2/datasets/EFWZ2Q5JAtC6QDSwV/items?format=jsonamp;clean=1",
    "lastUpdatedApify": "2020-11-07T20:30:00.000Z"
  }
]

function topXCountriesCasesName(num) {
    let countriesCases = [];
    let sortedCovidData = covid19JSON.sort((a,b) => b.infected  - a.infected )
    for(let i = 0; i < num; i   ) {
        countriesCases.push(sortedCovidData[i].country)
    }
    return countriesCases   
}

console.log(topXCountriesCasesName(2));  

Другой способ сделать это с помощью .slice и .map :

 const covid19JSON = [
  {
    "infected": 55630,
    "tested": "NA",
    "recovered": 38788,
    "deceased": 1897,
    "country": "Algeria",
    "moreData": "https://api.apify.com/v2/key-value-stores/pp4Wo2slUJ78ZnaAi/records/LATEST?disableRedirect=true",
    "historyData": "https://api.apify.com/v2/datasets/hi0DJXpcyzDwtg2Fm/items?format=jsonamp;clean=1",
    "sourceUrl": "http://covid19.sante.gov.dz/carte",
    "lastUpdatedSource": "2020-10-23T15:00:00.000Z",
    "lastUpdatedApify": "2020-10-24T12:00:00.000Z"
  },
  {
    "infected": 55632,
    "tested": null,
    "recovered": null,
    "deceased": null,
    "country": "Austria",
    "moreData": "https://api.apify.com/v2/key-value-stores/RJtyHLXtCepb4aYxB/records/LATEST?disableRedirect=true",
    "historyData": "https://api.apify.com/v2/datasets/EFWZ2Q5JAtC6QDSwV/items?format=jsonamp;clean=1",
    "lastUpdatedApify": "2020-11-07T20:30:00.000Z"
  }
]

function topXCountriesCasesName(num) {
    return covid19JSON
             .sort((a,b) => b.infected  - a.infected )
             .slice(0, num)
             .map(e => e.country);
}

console.log(topXCountriesCasesName(2));  

Комментарии:

1. Большое спасибо!

2. @SeanMcavoy добро пожаловать. Пожалуйста, отметьте ответ как решение (кнопка галочки), если он решил вашу проблему, чтобы будущие посетители также извлекли из него выгоду.