brother_ilya
@brother_ilya
Любопытная личность

Как сгруппировать и отсортировать массив имён?

Есть массив:

["Августеняк Екатерина", "Августовский Борис", "Бжожовский Теодор", "Богатова Августина", "Борисов Илья", "Голосовский Сергей", "Евдокимов Платон", "Исакова Виктория", "Майзингер Владимир", "Мартынова Анастасия", "Пастернак Ангелина", "Фролов Николай"]

Во что требуется превратить:

[
  ["Августеняк Екатерина", "Августовский Борис"],
  ["Бжожовский Теодор", "Богатова Августина", "Борисов Илья"],
  ["Голосовский Сергей"],
  ["Евдокимов Платон"],
  ["Исакова Виктория"],
  ["Майзингер Владимир", "Мартынова Анастасия"],
  ["Пастернак Ангелина"],
  ["Фролов Николай"]
]

Пока дошел до такого:

const sorted = authorsData.sort();
  console.log(sorted)
  const authorsArray = [];
  const sortingAuthorsByFirstSymbol = (array) => {
    let initialSymbol = array[0][0];
    sorted.map(author => {
      if (author[0] === initialSymbol) {
        let intermediateArray = [];
        intermediateArray.push(author);
        authorsArray.push(intermediateArray);
      } else if (author[0] !== initialSymbol) {
        let intermediateArray = [];
        initialSymbol = author[0];
        intermediateArray.push(author);
        authorsArray.push(intermediateArray);
      }
      return authorsArray;
    })
  }

  sortingAuthorsByFirstSymbol(sorted);
  console.log(authorsArray);

  const authorsGroupArray = [];

  const groupAuthors = (array) => {
    let initialSymbol = array[0][0][0];
    authorsArray.map(author => {
      if (author[0][0] === initialSymbol) {
        let intermediateArray = [];
        intermediateArray.push(author);
        authorsGroupArray.push(intermediateArray);
      } else {
        initialSymbol = author[0][0];
        let intermediateArray = [];
        authorsGroupArray.push(intermediateArray);
      }
      return authorsGroupArray;
    })
  }

  groupAuthors(authorsArray);
  console.log(authorsGroupArray);

Где sorted - исходный массив. Никак не получается сгруппировать элементы массивов в подмассив по первой букве. Данные нужны для вывода в интерфейс по алфавиту: Первая буква фамилий - список авторов с фамилией, начинающейся с этой буквы.
  • Вопрос задан
  • 341 просмотр
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const groupedAndSortedArr = Object
  .values(arr.reduce((acc, n) => ((acc[n[0]] ??= []).push(n), acc), {}))
  .sort((a, b) => a[0][0].localeCompare(b[0][0]));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы