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

У каждой предоставленной задачи есть объяснение, ожидаемый результат и решение. Я не утверждаю, что мои решения - лучший способ решить каждое из упражнений, но я считаю, что они могут помочь вам найти новые идеи, если вы застряли.

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

Вы можете начать в своем репозитории или клонировать мой. В этом репозитории вы можете найти полный список упражнений и решений. Кроме того, вы можете легко проверить свои решения с помощью заранее созданных тестов. Ссылка: https://github.com/andrewborisov/javascript-practice.

1. Заполнить. Напишите функцию, которая создает новый массив с заданными значениями.

/** 
  * Task description: Write a method that creates a new array with given values 
  * Expected Result: (3, 'a') => ['a', 'a', 'a'] 
  * Task Complexity: 1 of 5 
  * @param {number} arraySize - size of array 
  * @param {?} value - value to fill 
  * @returns {Array} 
*/
const fill = (arraySize, value) => {
 throw new Error('Put your solution here');
}
const data = 3;
const valueToFill = 'a';
console.log(fill(data, valueToFill)) // ['a', 'a', 'a']

Решение функции« Заливка

2. Обратный. Напишите функцию, которая переворачивает входной массив. Пожалуйста, не используйте array.reverse();, чтобы сделать эту задачу более приятной.

/** 
  * Task description: Write a method that reverts input array 
  * Expected Result: [1, 2, 3] => [3, 2, 1] 
  * Task Complexity: 1 of 5 
  * @param {Array} array - Array of any elements 
  * @returns {Array} 
*/
const reverse = (array) => {
 throw new Error('Put your solution here');
}
const data = [1, 2, 3];
console.log(reverse(data)); // [3, 2, 1]

Решение обратной функции.

3. Компактный. Напишите метод, который очищает массив от всех ненужных элементов, таких как false, undefined, пустые строки, ноль, ноль.

/** 
  * Task description: Write a method that clears array from all unnecessary elements, like false, undefined, empty strings, zero, null 
  * Expected Result: [0, 1, false, 2, undefined, '', 3, null] => [1, 2, 3] 
  * Task Complexity: 1 of 5 
  * @param {Array} array - An array of any elements 
  * @returns {Array} 
*/
const compact = (array) => {
 throw new Error('Put your solution here');
}
const data = [0, 1, false, 2, undefined, '', 3, null];
console.log(compact(data)) // [1, 2, 3]

Компактное функциональное решение.

4. Из пар. Напишите метод, который возвращает объект, состоящий из пар "ключ-значение".

/** 
  * Task description: Write a method that returns an object composed of key-value pairs. 
  * Expected Result: [['a', 1], ['b', 2]] => { a: 1, b: 2 } 
  * Task Complexity: 2 of 5 
  * @param {Array} array - a deep array of pairs 
  * @returns {Array} 
*/
const fromPairs = (array) => {
 throw new Error('Put your solution here');
}
const data = [['a', 1], ['b', 2]];
console.log(fromPairs(data)) // { 'a': 1, 'b': 2 }

Функциональное решение« От пар

5. Без. Метод должен возвращать массив без перечисленных значений. Попробуем найти решение, когда вводятся только примитивные типы данных.

/** 
  * Task description: Write a method that returns an array without listed values 
  * Expected Result: [1, 2, 3, 1, 2] without 1, 2 => [3] 
  * Task Complexity: 2 of 5 
  * @param {Array} array - Array of primitive data types 
  * @param {?} args list of values to remove 
  * @returns {Array} 
*/
const without = (array, ...args) => {
 throw new Error('Put your solution here');
}
const data = [1, 2, 3, 1, 2];
console.log(without(data, 1, 2)); // [3]

Без функционального решения. »

6. Уникальный. Напишите метод, возвращающий массив без дубликатов.

/** 
  * Task description: Write a method that returns a duplicate-free array 
  * Expected Result: Duplicate-free array [1, 2, 3, 1, 2] => [1, 2, 3] 
  * Task Complexity: 2 of 5 
  * @param {Array<string | number>} array - Array of primitive data types 
  * @returns {Array} 
*/
const unique = (array) => {
 throw new Error('Put your solution here');
}
const data = [1, 2, 1, 2, 3];
console.log(unique(data)); // [1, 2, 3]

Уникальное функциональное решение.

7. IsEqual. Напишите функцию, которая сравнивает два массива и возвращает истину, если они идентичны.

/** 
  * Task description: Write a method that makes a shallow compare of two arrays and returns true if they are identical. 
  * Expected Result: ([1, 2, 3], [1, 2, 3]) => true 
  * Task Complexity: 2 of 5 
  * @param {Array} firstArray - Array of primitive data types 
  * @param {Array} secondArray - Array of primitive data types 
  * @returns {boolean} 
*/
const isEqual = (firstArray, secondArray) => {
  throw new Error('Put your solution here');
}
const arr1 = [1, 2, 3, 4];
const arr2 = [1, 2, 3, 4];
const arr3 = [1, 2, 3, 5];
const arr4 = [1, 2, 3, 4, 5];
console.log(isEqual(arr1, arr2)); // true
console.log(isEqual(arr1, arr3)); // false
console.log(isEqual(arr1, arr4)); // false

Функциональное решение« IsEqual

8. Flatten. Напишите функцию, которая превращает глубокий массив в простой массив. Пожалуйста, не используйте array.flat();, чтобы сделать эту задачу более приятной.

/** 
  * Task description: Write a method that turns a deep array into a plain array 
  * Expected Result: [1, 2, [3, 4, [5]]] => [1, 2, 3, 4, 5] 
  * Task complexity: 3 of 5 
  * @param {Array} array - A deep array 
  * @returns {Array} 
*/
const flatten = (array) => {
 throw new Error('Put your solution here');
}
const data = [1, 2, [3, 4, [5]]];
console.log(flatten(data)); // [1, 2, 3, 4, 5]

Функциональное решение« сгладить

9. Чанк. Напишите метод, который разбивает массив на части определенного размера.

/** 
  * Task description: Write a method that splits an array into parts of determined size 
  * Expected Result: ([1, 2, 3, 4, 5], 2) => [[1, 2], [3, 4], [5]] 
  * Task complexity: 3 of 5 
  * @param {Array} array - An array of any elements 
  * @param {number} size - size of chunks 
  * @returns {Array} 
*/
const chunk = (array, size) => {
 throw new Error('Put your solution here');
}
const data = [1, 2, 3, 4, 5, 6, 7];
console.log(chunk(data, 2)) // [[1, 2], [3, 4], [5, 6], [7]]
console.log(chunk(data, 3)) // [[1, 2, 3], [4, 5, 6], [7]]

Функциональное решение« Чанк

10. Перекресток. Создайте массив уникальных значений, которые включены во все заданные массивы. Начнем с примитивных типов данных.

/** 
  * Task description: Write a method that creates an array of unique values that are included in all given arrays 
  * Expected Result: ([1, 2], [2, 3]) => [2] 
  * Task complexity: 4 of 5 
  * @param {?} arrays - Arrays of primitive data types 
  * @returns {Array} 
*/
const intersection = (...arrays) => {
 throw new Error('Put your solution here');
}
const arr1 = [1, 2];
const arr2 = [2, 3];
const arr3 = ['a', 'b'];
const arr4 = ['b', 'c'];
const arr5 = ['b', 'e', 'c'];
const arr6 = ['b', 'b', 'e'];
const arr7 = ['b', 'c', 'e'];
const arr8 = ['b', 'e', 'c'];
console.log(intersection(arr1, arr2)) // [2]
console.log(intersection(arr3, arr4, arr5)) // ['b']
console.log(intersection(arr6, arr7, arr8)) // ['b', 'e']

Решение функции« Пересечение

На мой взгляд, практика программирования существенно влияет на ваши навыки, поэтому для меня очень важно узнавать что-то новое каждый день.

Я надеюсь, что упомянутые выше задания помогут вам узнать что-то новое или просто развлечься.

Что дальше?

Если вам понравился этот, вы можете перейти к следующему набору заданий для объектов: https://medium.com/@andrey.igorevich.borisov/10-javascript-exercises-with-objects-8942cc502754