daria-moreno

задачки по 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;
}

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