После того, как я много исследовал в Интернете, я пришел к выводу, что нет серии руководств / видео, посвященных подготовке MAANG (Meta, Apple, Amazon, NetFlix, Google) для разработчиков FrontEnd. Итак, я решил расшифровать самые распространенные вопросы интервью МААНГ в своем YouTube-канале. В этой статье я рассмотрю очень интересную проблему. Итак, читайте до конца.

Вопрос. Свести данный массив

Пример ввода:[1,2,[3,4],5]

Пример вывода:[1,2,3,4,5]

Компания, в которой задан вопрос: Meta/Microsoft/Google/Apple/Amazon

Я написал рекурсивное решение этой задачи здесь. Очень важно знать рекурсивный подход, так как большинство компаний ожидают, что вы знаете это решение. Но итеративный подход тоже не так прост. Так что на собеседовании вас могут попросить написать оба решения. Итак, в этой статье я объясню итеративный подход.

Суть логики

let arr = [1,2,[3,4]];
let last = arr.pop(); // Ex: [3,4]
arr.push(...last); // Spread operator will convert [3,4] to 3,4
console.log(arr)

Скопируйте этот код и запустите, вы должны получить представление о сути логики. Ниже это объясняется подробно.

Алгоритм

  1. Взяв последний элемент вложенного массива,
  2. В случае, если это также массив, мы используем оператор распространения, чтобы удалить массив и вернуть его обратно в массив.
  3. Если это не массив, то не используйте оператор распространения, просто поместите значение в массив.

Полный код

function flatten(input) {
  const stack = [...input];
  const res = [];
  while (stack.length) {
    // pop value from stack
    const next = stack.pop();
    if (Array.isArray(next)) {
      // push back array items, won't modify the original input
      stack.push(...next);
    } else {
      res.push(next);
    }
  }
  // reverse to restore input order
  return res.reverse();
}

const arr = [1, 2, [3, 4, [5, 6]]];
flatten(arr);

Пояснение:

const stack = [...input]; 
// it is just a deep copy of variable. Otherwise source array will // be modified

Переменная res используется для хранения конечного результата.

возвращаемое значение является обратным res, потому что мы выполняем нашу деятельность с последнего. Таким образом, при окончательной отправке результата его следует перевернуть, чтобы сделать его в фактическом порядке.

return res.reverse();

Если вы еще не подписаны на меня на Medium, подпишитесь. Не забудьте подписаться на мой Youtube Канал,

В случае, если вы хотите поговорить со мной лично для пробного интервью, дать советы и рекомендации, чтобы пройти собеседование или просмотреть резюме, вы можете записаться на сеанс здесь:



Если вы готовитесь к интервью с фронтенд-разработчиком, пожалуйста, посмотрите мои серии ниже:

https://www.youtube.com/watch?v=qcixpy3HQ9s&list=PLmcRO0ZwQv4QMslGJQg7N8AzaHkC5pJ4t

Если вы хотите узнать о собственных реализациях встроенного метода в JavaScript, посмотрите мою серию ниже:

https://www.youtube.com/watch?v=eGzErMUfdpk&list=PLmcRO0ZwQv4RWqjZCajaKBAdCJjmkAL_I