Создание уникальной строки из актуальных записей с учётом их порядка

Отфильтруйте expired, отсортируйте копию по order, разверните каждую строку и добавляйте только ещё не встречавшиеся символы. Итог — '1zyx2badc'.

Короткий ответ

Что ответить на собеседовании

Отфильтруйте expired, отсортируйте копию по order, разверните каждую строку и добавляйте только ещё не встречавшиеся символы. Итог — '1zyx2badc'.

Подробный разбор

Ответ с пояснениями

Условие

Имеется массив объектов, каждый из которых содержит строковое поле value, числовой параметр order и логический флаг expired. Требуется собрать итоговую строку, включающую символы только из тех записей, у которых expired равно false. Записи необходимо отсортировать по полю order по возрастанию, а затем для каждой строки взять её символы в обратном порядке. При формировании результата следует исключить повторяющиеся символы, оставив каждый символ только один раз.

const input = [
  { value: 'abcd', order: 4, expired: false },
  { value: 'qwer', order: 2, expired: true },
  { value: 'xyz1', order: 1, expired: false },
  { value: 'abx2', order: 3, expired: false },
];

let buildString = () => {};

console.log(buildString); //1zyx2badc

Ответ

Отфильтруйте expired, отсортируйте копию по order, разверните каждую строку и добавляйте только ещё не встречавшиеся символы. Итог — '1zyx2badc'.

function buildString(input) {
  const seen = new Set();
  for (const item of input.filter(item => item.expired === false).sort((a, b) => a.order - b.order)) {
    for (const char of Array.from(item.value).reverse()) seen.add(char);
  }
  return [...seen].join('');
}
console.log(buildString(input));

Set сохраняет порядок первого добавления. В условии console.log(buildString) печатал бы саму функцию, а не результат — нужен вызов с input. При равных order сохраняется исходный порядок элементов. Символы здесь понимаются как кодовые точки Unicode.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее