Массив объектов найти

как мне получить из массива объектов какие языки самые популярные в 2019

к примеру дан массив обьектов

const data = [
 { firstName: 'Noah', lastName: 'M.', country: 'Switzerland', continent: 'Europe', age: 19, language: 'C', year: 2019 },
 { firstName: 'Anna', lastName: 'R.', country: 'Liechtenstein', continent: 'Europe', age: 52, language: 'JavaScript', year: 2019 },
 { firstName: 'Piter', lastName: 'G.', country: 'Sweden', continent: 'Europe', age: 30, language: 'JavaScript', year: 2019 },
  { firstName: 'Ramon', lastName: 'R.', country: 'Paraguay', continent: 'Americas', age: 29, language: 'Ruby', year: 2014 },
 { firstName: 'George', lastName: 'B.', country: 'England', continent: 'Europe', age: 81, language: 'C', year: 2016 },
];

и получить в формате

console.log(result);
// { 
//   C: 1, 
//   JavaScript: 2 
// }

Моего мозга хватает только найти сколько их и не более того))


Ответы (2 шт):

Автор решения: 1ocke

Сначала отфильтруем массив по году, чтобы остался массив с теми объектами, где год 2019. Заранее вытаскиваем из объекта год с помощью деструктуризации.

Затем с помощью reduce создадим нужный объект. Если есть вопросы по данному методу, то можете задать их в комментариях.

const data = [
  { firstName: 'Noah', lastName: 'M.', country: 'Switzerland', continent: 'Europe', age: 19, language: 'C', year: 2019 },
  { firstName: 'Anna', lastName: 'R.', country: 'Liechtenstein', continent: 'Europe', age: 52, language: 'JavaScript', year: 2019 },
  { firstName: 'Piter', lastName: 'G.', country: 'Sweden', continent: 'Europe', age: 30, language: 'JavaScript', year: 2019 },
  { firstName: 'Ramon', lastName: 'R.', country: 'Paraguay', continent: 'Americas', age: 29, language: 'Ruby', year: 2014 },
  { firstName: 'George', lastName: 'B.', country: 'England', continent: 'Europe', age: 81, language: 'C', year: 2016 },
];

const popularLanguages = data
  .filter(({ year }) => year === 2019)
  .reduce((acc, { language }) => (
    { ...acc, [language]: acc[language] + 1 || 1 }
  ), {});

console.log(popularLanguages);

→ Ссылка
Автор решения: RavenTheX

Как вариант

const data = [
 { firstName: 'Noah', lastName: 'M.', country: 'Switzerland', continent: 'Europe', age: 19, language: 'C', year: 2019 },
 { firstName: 'Anna', lastName: 'R.', country: 'Liechtenstein', continent: 'Europe', age: 52, language: 'JavaScript', year: 2019 },
 { firstName: 'Piter', lastName: 'G.', country: 'Sweden', continent: 'Europe', age: 30, language: 'JavaScript', year: 2019 },
  { firstName: 'Ramon', lastName: 'R.', country: 'Paraguay', continent: 'Americas', age: 29, language: 'Ruby', year: 2014 },
 { firstName: 'George', lastName: 'B.', country: 'England', continent: 'Europe', age: 81, language: 'C', year: 2016 },
];

let languages = {}

let data2 = data.filter(item => item.year === 2019).forEach((item, index) => {
  languages[item.language] = index === 0 ? index + 1 : index
})

console.log(languages)

Обновил ответ с удалением дубликатов

const data = [
 { firstName: 'Noah', lastName: 'M.', country: 'Switzerland', continent: 'Europe', age: 19, language: 'C', year: 2019 },
  { firstName: 'Noah', lastName: 'M.', country: 'Switzerland', continent: 'Europe', age: 19, language: 'C', year: 2019 },
 { firstName: 'Anna', lastName: 'R.', country: 'Liechtenstein', continent: 'Europe', age: 52, language: 'JavaScript', year: 2019 },
 { firstName: 'Piter', lastName: 'G.', country: 'Sweden', continent: 'Europe', age: 30, language: 'JavaScript', year: 2019 },
  { firstName: 'Ramon', lastName: 'R.', country: 'Paraguay', continent: 'Americas', age: 29, language: 'Ruby', year: 2014 },
 { firstName: 'George', lastName: 'B.', country: 'England', continent: 'Europe', age: 81, language: 'C', year: 2016 },
];

let languages = {}

let data2 = Array.from(new Set(data.filter(item => item.year === 2019).map(item => item.language)))

data2.forEach((lang, index) => {
 languages[lang] = index + 1
})

console.log(languages)

→ Ссылка