Отфильтруйте expired, отсортируйте по order, разверните символы каждого value и удалите повторы с сохранением порядка: получится 2ir0k8j1doq3ewl.
// Написать функцию, либо последовательность операций, которая вернет результат соответствующий всем условиям ниже:
Отфильтруйте expired, отсортируйте по order, разверните символы каждого value и удалите повторы с сохранением порядка: получится 2ir0k8j1doq3ewl.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
// Написать функцию, либо последовательность операций, которая вернет результат соответствующий всем условиям ниже: // 1) результат есть строка из сконкатенированных value элементов коллекции, расположенных в обратном порядке символов // 2) результат не содержит одинаковых символов (если символ уже добавлен в строку, то он более не добавляется) // 3) результат собирается только из непросроченных записей и конкатенируется в порядке возрастания order
const input = [ { value: 'qlwe3q1', order: 4, expired: false }, { value: 'asd2dq43', order: 2, expired: true }, { value: 'j8k0ri2', order: 1, expired: false }, { value: 'oiod128', order: 3, expired: false } ];
Ответ
Отфильтруйте expired, отсортируйте по order, разверните символы каждого value и удалите повторы с сохранением порядка: получится 2ir0k8j1doq3ewl.
Здесь «в обратном порядке символов» трактуется как разворот каждого value перед конкатенацией:
function collect(input) {
const chars = input.filter(x => !x.expired)
.sort((a, b) => a.order - b.order)
.flatMap(x => [...x.value].reverse());
return [...new Set(chars)].join('');
}
Исходный массив не меняется: sort работает после filter. Если имелся в виду разворот всей склеенной строки, операция должна выполняться после объединения и результат будет другим; это стоит уточнить. Перебор через spread работает по кодовым точкам, не по сложным графемам.