JS Tower
JavaScript & TypeScriptПодготовка к собеседованию

Задачи на массивы

Типичные задачи на работу с массивами

Цель урока

Разбор задач на массивы, которые часто дают на собеседованиях.


Найти максимум/минимум

const numbers = [3, 7, 2, 9, 1, 5];

// Способ 1: Math.max/min
const max = Math.max(...numbers);
const min = Math.min(...numbers);

// Способ 2: reduce
const max2 = numbers.reduce((a, b) => a > b ? a : b);
const min2 = numbers.reduce((a, b) => a < b ? a : b);
Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
9 1

Удалить дубликаты

const arr = [1, 2, 2, 3, 3, 3, 4];

// Способ 1: Set
const unique1 = [...new Set(arr)];

// Способ 2: filter
const unique2 = arr.filter((item, index) => arr.indexOf(item) === index);

// Способ 3: reduce
const unique3 = arr.reduce((acc, item) => {
  return acc.includes(item) ? acc : [...acc, item];
}, []);
Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
[1,2,3,4]

Группировка по свойству

const users = [
  { name: "Иван", role: "admin" },
  { name: "Мария", role: "user" },
  { name: "Пётр", role: "admin" },
  { name: "Анна", role: "user" }
];

const grouped = users.reduce((acc, user) => {
  const key = user.role;
  if (!acc[key]) acc[key] = [];
  acc[key].push(user);
  return acc;
}, {});

// { admin: [...], user: [...] }
Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
{"admin":2,"user":1}

Пересечение массивов

const arr1 = [1, 2, 3, 4, 5];
const arr2 = [3, 4, 5, 6, 7];

const intersection = arr1.filter(x => arr2.includes(x));
// [3, 4, 5]

// С Set (быстрее для больших массивов)
const set2 = new Set(arr2);
const intersection2 = arr1.filter(x => set2.has(x));
Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
[3,4,5]

Разность массивов

const arr1 = [1, 2, 3, 4, 5];
const arr2 = [3, 4, 5, 6, 7];

const difference = arr1.filter(x => !arr2.includes(x));
// [1, 2]

Сортировка объектов

const users = [
  { name: "Иван", age: 25 },
  { name: "Мария", age: 22 },
  { name: "Пётр", age: 30 }
];

// По возрасту (возрастание)
users.sort((a, b) => a.age - b.age);

// По возрасту (убывание)
users.sort((a, b) => b.age - a.age);

// По имени
users.sort((a, b) => a.name.localeCompare(b.name));
Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
Мария Иван Пётр

Chunk (разбиение на части)

function chunk(arr, size) {
  const result = [];
  for (let i = 0; i < arr.length; i += size) {
    result.push(arr.slice(i, i + size));
  }
  return result;
}

chunk([1, 2, 3, 4, 5], 2);
// [[1, 2], [3, 4], [5]]
Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
[[1,2],[3,4],[5]]

Подсчёт элементов

const fruits = ["яблоко", "банан", "яблоко", "апельсин", "банан", "банан"];

const count = fruits.reduce((acc, fruit) => {
  acc[fruit] = (acc[fruit] || 0) + 1;
  return acc;
}, {});

// { яблоко: 2, банан: 3, апельсин: 1 }

Найти N максимальных

function topN(arr, n) {
  return [...arr].sort((a, b) => b - a).slice(0, n);
}

topN([3, 7, 2, 9, 1, 5], 3);
// [9, 7, 5]
Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
[9,7,5]

Rotate Array

function rotate(arr, k) {
  k = k % arr.length;
  return [...arr.slice(-k), ...arr.slice(0, -k)];
}

rotate([1, 2, 3, 4, 5], 2);
// [4, 5, 1, 2, 3]

Zip массивов

function zip(...arrays) {
  const maxLength = Math.max(...arrays.map(arr => arr.length));
  return Array.from({ length: maxLength }, (_, i) => 
    arrays.map(arr => arr[i])
  );
}

zip([1, 2, 3], ["a", "b", "c"]);
// [[1, "a"], [2, "b"], [3, "c"]]
Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
[[1,"a"],[2,"b"],[3,"c"]]

Практикуйся

Эти задачи проверяют знание методов массивов и умение мыслить алгоритмически.