iwanttobealight

задачки по js

programming interviews

Список задачек, которые у меня спрашивали на фронтендерских собеседованиях в 2023 году

  1. Классическое расплющивание массива

    Массив с результатами храним в замыкании, туда записываем значения, если наше значение это другой массив, то вызываем ту же функцию рекурсивно. Есть и другие варианты этой задачи, например с указанием глубины


const arr = [1, [2, [3, [4, 5]]]]; // => [1, 2, 3, 4, 5]

export function flat(arr) {
const result = [];

function helper(a) {
for (let i of a) {
if (Array.isArray(i)) {
helper(i);
} else {
result.push(i);
}
}
}

helper(arr);
return result;
}

  1. Каррирование с последующим вызовом без аргумента

Если у нас есть второй аргумент, возвращаем функцию, куда передаем сумму. Если его нет, возвращаем сумму

// sum(1)(2)(3)() => 6

function sum(a) {
return function (b) {
if (!b) {
return a;
}

return sum(a + b);
};
}

  1. Проверить правильность скобок

Записываем скобки в словарик, итерируемся по массиву. Если попадается открывающая скобка, добавляем в стек такую же закрывающую. Если попадается закрывающая, сравниваем ее с последней скобкой в стеке. Если они не равны, возвращаем false. В конце функции длина стека должна быть равна нулю

const brackets = {
"(": ")",
"{": "}",
"[": "]",
};

function isValid(string) {
const stack = [];

for (let i of string) {
if (brackets[i]) {
stack.push(brackets[i]);
} else {
if (i !== stack.pop()) return false;
}
}

return stack.length === 0;
}

к другим постам