Рубрики
Без рубрики

Как впечатлить интервьюеров, используя рекурсию в JavaScript с функциями ES6

Там нет ничего такого мишечного и полезного для интервью JavaScript, чем рекурсия. Если вы просто хотите быть впечатляющими с рекурсией в JavaScript, вот несколько примеров Semi Real-World (Teacic Test Test Test). Краткое определение рекурсивного решения проблемы (в информатике): не используйте итерацию.

Там нет ничего такого мишечного и полезного для интервью JavaScript, чем рекурсия.

Если вы просто хотите быть впечатляющими с рекурсией в JavaScript, вот несколько примеров Semi Real-World (Teacic Test Test Test).

Краткое определение рекурсивного решения проблемы (в информатике): не используйте итерацию. Это обычно означает, что функция должна позвонить себе с меньшим экземпляром той же проблемы. Это делает это, пока оно попадает в тривиальный случай (обычно определено в проблеме).

Следовательно, рекурсия состоит из нескольких шагов.

В этом посте мы обсудим:

  • ? Рекурсия для завершения последовательных HTTP-запросов
  • ? Количество символов

Примеры этого поста также на Obervablehq. , который является супер прохладным инструментом, который позволяет создавать ноутбуки JavaScript:

Скажем, вам нужно получить несколько страниц из API для отдыха, и вы вынуждены использовать нативный модуль HTTPS ( Пример здесь ). В этой ситуации мы получим комментарии от Reddit API.

С помощью этой API:

  • Если есть больше комментариев, чем в соответствии с одним ответом, он вернет после поле в данных. Это может быть использовано в качестве параметра запроса в запросе, чтобы получить следующий кусок комментариев
  • Если больше комментариев больше нет, после будет фальсию

Это определяет наши прекрасные и рекурсивные случаи. Мы исчерпываем данные из API Reddit, а затем либо:

  • после это фальсию → Захватывающий случай вернуть данные
  • после определяется → Рекурсивный случай пропустите его, чтобы получить следующую страницу, а также данные, возвращаемые из текущего вызова

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

const fetch = require('node-fetch');
const user = 'hugo__df';
function makeRedditCommentUrl(user, queryParams) {
  return `https://www.reddit.com/user/${user}/comments.json?${
    Object.entries(queryParams)
      .filter(([k, v]) => Boolean(v))
      .map(
        ([k, v]) => `${k}=${v}`
      ).join('&')
  }`;
}
function recursiveCommentFetch(user, data = [], { after, limit = 100 } = {}) {
  const url = makeRedditCommentUrl(user, { after, limit });
  return fetch(url)
    .then(res => res.json())
    .then(res => {
      const { after, children } = res.data;
      const newData = [...data, ...children];
      if (after) {
        // recursive case, there's a way to fetch more comments
        return recurseCommentFetch(user, newData, { after });
      }
      // base or terminating case
      return newData;
    });
}
recursiveCommentFetch(user)
  .then(comments => console.log(comments));

Я знакомился с этим API, создав следующую визуализацию для взносов Reddit (в стиле графика вклада Github). Посмотрите здесь Отказ Версия для блога тоже живет .

Когда вопрос идет что-то подобное: «Учитывая вход, вернуть объект, содержащий, сколько раз каждый символ присутствует на входе», – вы будете использовать этот метод.

Есть Живая демонстрация здесь Отказ

Захватывающий и рекурсивный случай не сразу очевиден, поэтому здесь есть несколько шашек:

  1. Понимание того, что вход можно бросить в строку, которая может быть .split в массив (т.е. Самый произвольный вход может быть преобразован в массив).
  2. Зная, как резать через массив. Это, вероятно, одно из самых простых/наиболее распространенных вещей, чтобы пройти. Но пару раз берется на то, чтобы начать чувствовать себя комфортно.

Это дает нам следующую ситуацию для рекурсивной функции:

  • Список/массив символов пусто → Захватывающий случай вернуть Характертолога карта
  • Список/массив символов не пусты → Рекурсивный случай обновите HASTARCETOCOUNTMAP При увеличении/инициализации входа текущего характера. Позвоните в рекурсивную функцию с обновленной картой и остальной частью списка/массива.

Я написал более полный пост: Рекурсия в JavaScript с ES6, разрушимостью и отдыхом/распространением , который входит в более подробную информацию (примеры и методы) о том, как мы можем резать через списки (массивы) в JavaScript ES6. Это объясняет такие вещи, как [FirstCharacter, ... отдых] Обозначение.

function recurseCountCharacters(
  [firstCharacter, ...rest],
  characterToCountMap = {}
) {
  const currentCharacterCount = characterToCountMap[firstCharacter] || 0;
  const newCharacterToCountMap = {
    ...characterToCountMap,
    [firstCharacter]: currentCharacterCount + 1
  };
  
  if (rest.length === 0) {
    // base/terminating case
    // -> nothing characters left in the string
    return newCharacterToCountMap;
  }
  // recursive case
  return recurseCountCharacters(rest, newCharacterToCountMap);
}
function countCharacters(input) {
  return recurseCountCharacters(String(input).split(''));  
}
console.log(countCharacters(1000000));
// { "0":6, "1": 1 }
console.log(countCharacters('some sentence'));
// { "s":2,"o":1,"m":1,"e":4," ":1,"n":2,"t":1,"c":1}

Вот как вы верите через интервью, используя рекурсию?, Бегинные круги вокруг этих игрушечных проблем.

Рекурсивные решения для собеседования проблемы в конечном итоге выглядят охладителю и более чистые, чем итеративные. Они интервьюера глаз-конфеты.

Для любых вопросов вы можете связаться со мной в Twitter @hugo__df Отказ

Получите все сообщения недели, прежде чем кто-либо еще в вашем почтовом ящике: Код с бюллетенью Hugo Отказ

Оригинал: “https://www.freecodecamp.org/news/how-to-impress-interviewers-by-using-recursion-in-javascript-with-es6-features-a14c763110d7/”