В принципе, эта статья может быть полезна для младших и средних разработчиков программного обеспечения 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