@bozuriciyu

Как отфильтровать массив объектов в объекте?

Как красиво и быстро отфильтровать

const data = {
  '2010': [
    {
      number: '01'
    },
    {
      number: '01'
    },
    {
      number: '02'
    },
  ],
  '2011': [
    {
      number: '03'
    },
    {
      number: '04'
    },
    {
      number: '04'
    },
  ]
}


из этого, в это

const data = {
  '2010': [
    {
      number: '01'
    },
    {
      number: '02'
    },
  ],
  '2011': [
    {
      number: '03'
    },
    {
      number: '04'
    },
  ]
}
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
for (let year in data) {
	let cache = {};
	data[year] = data[year].filter(e=>{
		if (cache[e.number]) return false;
		return cache[e.number] = true;
	});
}

Точно не знаю, что для вас значит слово "красиво". Если это значит в одну строчку, то мне кажется, что красота здесь является спорным моментом. Лично я под красотой понимаю, прежде всего, понятный код (для тех, кто с ним не знаком). А это в первую очередь означает наличие комментариев или хотя бы осмысленное именование. И для простых примеров как-то странно эту красоту наводить.

Ну а по скорости всё зависит от алгоритма и акцента на использовании нативных функций. Выбор алгоритма, в свою очередь, зависит от многих факторов, которые в вашем вопросе не обозначены. Так что привожу просто наиболее очевидный для меня алгоритм.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
zabudkin
@zabudkin
Инженер-системотехник, программист, админ, ТПУ!!!!
$data=join($data["2010"],$data["2011"]);

так? :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы