Если кратко, есть функция getUsers, которая вызывается подряд много раз. Не важно сколько раз вызывается, главное что много. Вопрос: что в этом коде не так? Необходимо исправить недочет.
function getUsers() {
const users = [
{
filter: 'active',
name: 'A',
},
{
filter: 'Inactive',
name: 'A',
},
]
const appliedFilters = ['active']
const result = []
for (let i = 0; i < users.length; i += 1) {
if (appliedFilters.includes(users[i].filter)) {
result.push(users[i])
}
}
return result
}
getUsers()
getUsers()
getUsers()
// вызывается еще N раз (то есть очень много вызвовов подряд)
Если честно, я долго ломал голову, что не так. Единственное, до чего я додумался, что можно цилк for заменить на filter, будет меньше кода. Но это был неверный ответ.
Что ж, не буду томить, скажу правильный ответ. Только перед этим попробуйте сами подумать, что в этом коде не так, а после открывайте спойлер.
ОТВЕТ:
Нужно
вынести массивы users и appliedFilters за функцию getUsers. При многократном вызове функции getUsers создается много массивов, что влияет на размер выделяемой памяти для создания объектов в JS.
Если честно, интервьюер как бы прав. Но это очень странная задача. Прям очень странная. Зачем ее давать, не очень понятно. Мне сказали, что у них в проекте таких кейсов много и многочисленное создание JS-объектов влияет на производительность их приложения.
Но этот аргумент был бы логичным, если мы бы создавали прям большие массивы при каждом вызове функции. А в примере дан массив на 2 и 1 элемента. Поэтому как по мне, задача не очень доработана.
А вы как думаете, задача по условию нормальная либо странно ее давать на собеседовании? 🧐