12 полезных советов и трюков с JavaScript массивами
2 года назад·4 мин. на чтение
Массив является одним из самых распространенных структур в JavaScript, который дает нам много возможностей для работы с данными.
Принимая во внимание, что массив является одной из основных тем в JavaScript, о которой вы узнаете в начале своего пути программирования, в этой статье рассмотрим несколько трюков, о которых вы, возможно, не знаете и которые могут быть очень полезны в разработке.
3. Как трансформировать JavaScript массив не используя
Вероятно, все знают метод массивов
1. Как удалить дубликаты из JavaScript массива?
Это очень популярный вопрос интервью о массивах JavaScript, о том, как извлечь уникальные значения из массива JavaScript. Вот быстрое и простое решение этой проблемы, вы можете использоватьnew Set()
для этой цели. Рассмотрим два способа сделать это, один с помощью метода .from()
, а второй с оператором spread (...
).
Еще несколько способов удаления дубликатов из JavaScript массива описаны в статье "Как удалить повторяющиеся элементы массива в JavaScript?"const fruits = ["banana", "apple", "orange", "watermelon", "apple", "orange", "grape", "apple"]; // Первый способ const uniqueFruits = Array.from(new Set(fruits)); console.log(uniqueFruits); // возвращает ["banana", "apple", "orange", "watermelon", "grape"] // Второй способ const uniqueFruits2 = […new Set(fruits)]; console.log(uniqueFruits2); // возвращает ["banana", "apple", "orange", "watermelon", "grape"]
2. Как заменить определенное значение в JavaScript массиве?
Иногда при написании кода необходимо заменить определенное значение в массиве, и для этого есть хороший короткий метод, о котором вы, возможно, еще не знаете. Для этого мы можем использовать.splice(start, value to remove, valueToAdd)
и передать туда все три параметра, указывающие, где мы хотим начать модификацию, сколько значений мы хотим изменить, и новые значения.
const fruits = ["banana", "apple", "orange", "watermelon", "apple", "orange", "grape", "apple"]; fruits.splice(0, 2, "potato", "tomato"); console.log(fruits); // возвращает ["potato", "tomato", "orange", "watermelon", "apple", "orange", "grape", "apple"]
3. Как трансформировать JavaScript массив не используя .map()
?
Вероятно, все знают метод массивов .map()
, но есть другое решение, которое может быть использовано для получения аналогичного эффекта и очень чистого кода. Для этой цели мы можем использовать метод .from()
.
const friends = [ { name: "John", age: 22 }, { name: "Peter", age: 23 }, { name: "Mark", age: 24 }, { name: "Maria", age: 22 }, { name: "Monica", age: 21 }, { name: "Martha", age: 19 }, ] const friendsNames = Array.from(friends, ({name}) => name); console.log(friendsNames); // возвращает ["John", "Peter", "Mark", "Maria", "Monica", "Martha"]
4. Как очистите JavaScript массив?
Что делать если по каким-то причинам нужно очистить массив, но не хочется удалять элементы по одному? Это очень просто сделать одной строкой кода. Чтобы очистить массив, вам нужно установить длину массива равным0
, и все.
const fruits = ["banana", "apple", "orange", "watermelon", "apple", "orange", "grape", "apple"]; fruits.length = 0; console.log(fruits); // возвращает []
5. Как в JavaScript преобразовать массив в объект?
Бывает, что у нас есть массив, но для какой-то цели нам нужен объект с этими данными, и самый быстрый способ преобразовать массив в объект — использовать известный оператор spread (...
).
const fruits = ["banana", "apple", "orange", "watermelon"]; const fruitsObj = { ...fruits }; console.log(fruitsObj); // возвращает { 0: "banana", 1: "apple", 2: "orange", 3: "watermelon", 4: "apple", 5: "orange", 6: "grape", 7: "apple" }
6. Как заполнить данными массив в JavaScript?
Бывают ситуации, когда мы создаем массив, и мы хотели бы заполнить его какими-то данными, или нам нужен массив с одинаковыми значениями, и в этом случае можно использовать метод.fill()
.
const newArray = new Array(10).fill("1"); console.log(newArray); // возвращает ["1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1"]
7. Как объединить несколько массивов в JavaScript?
Знаете ли вы, как объединить массивы в один массив без использования метода.concat()
? Существует простой способ объединить любое количество массивов в один одной строкой кода. Как вы, наверное, уже поняли, оператор spread (...
) довольно полезен при работе с массивами и в данном случае он тоже применим.
const fruits = ["apple", "banana", "orange"]; const meat = ["beef", "fish"]; const vegetables = ["potato", "tomato", "cucumber"]; const food = [...fruits, ...meat, ...vegetables]; console.log(food); // ["apple", "banana", "orange", "beef", "fish", "potato", "tomato", "cucumber"]
8. Как удалить ложные значений из JavaScript массива?
Сначала определим ложные значения. В JavaScript ложными значениями являютсяfalse
, 0
, ""
, null
, NaN
, undefined
. Теперь мы можем узнать, как удалить такого рода значения из нашего массива. Для этого мы будем использовать метод .filter()
.
const mixedArr = [0, "blue", "", NaN, 9, true, undefined, "white", false]; const trueArr = mixedArr.filter(Boolean); console.log(trueArr); // возвращает ["blue", 9, true, "white"]
9. Как получить случайное значение из JavaScript массива?
Иногда нам нужно выбрать значение из массива случайным образом. Простой, быстрый и короткий способ - получить случайный индекс в соответствии с длиной массива. Давайте посмотрим код:const colors = ["blue", "white", "green", "navy", "pink", "purple", "orange", "yellow", "black", "brown"]; const randomColor = colors[(Math.floor(Math.random() * (colors.length)))]
10. Как реверсировать массив на JavaScript?
Когда нам нужно перевернуть наш массив, нет необходимости создавать его через сложные циклы и функции, есть простой метод массива, который делает все это за нас, и с одной строкой кода мы можем повернуть наш массив вспять. Давайте проверим:const colors = ["blue", "white", "green", "navy", "pink", "purple", "orange", "yellow", "black", "brown"]; const reversedColors = colors.reverse(); console.log(reversedColors); // возвращает ["brown", "black", "yellow", "orange", "purple", "pink", "navy", "green", "white", "blue"]
11. Как получить n-й с конца элемент массива в JavaScript?
В JavaScript есть интересный метод, позволяющий найти индекс последнего вхождения данного элемента. Например, если наш массив имеет повторяющиеся значения, мы можем найти позицию последнего его вхождения. Рассмотрим пример кода:const nums = [1, 5, 2, 6, 3, 5, 2, 3, 6, 5, 2, 7]; const lastIndex = nums.lastIndexOf(5); console.log(lastIndex); // возвращает 9
12. Как просуммировать все значения в JavaScript массиве?
Это еще одна популярная задача, которая очень часто возникает во время JavaScript собеседования. Здесь нет ничего сложного; ее можно решить с помощью метода.reduce
одной строкой кода. Давайте проверим код:
const nums = [1, 5, 2, 6]; const sum = nums.reduce((x, y) => x + y); console.log(sum); // возвращает 14
Итоги
В этой статье мы рассмотрели 12 трюков и советов, которые могут помочь вам при разработке и сделают ваш код коротким и чистым.Как создать массив, заполненный числами в JavaScript
2 года назад·1 мин. на чтение
Иногда нужно создать массив заполненный числами в JavaScript или создать массив от 1 до определённого числа. В этой статье содержится короткий ответ для быстрого решения.
Короткое решение
Для получения массива чисел от 0 до N, можно воспользоваться методом массиваfrom
.
Array.from({ length: 10 }, (_, i) => i) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Более универсальный способ в виде функции
length
- длина массива. fn
- функция для кастомизации элемента. Т.к. числа по умолчанию начинаются с нуля, мы можем передать i => i + 1
и получить массив от 1 до N, как в примере ниже.
Использованиеconst getNumbers = (length, fn = i => i) => { return Array.from({ length }, (_, i) => fn(i)) }
console.log(getNumbers(10, i => i + 1)) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] console.log(getNumbers(10)) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Реверсированный массив
Здесь в функцию передается не простоlength
, а length - 1
. Это делается для того, чтобы сохранить соглашение, что индексы начинаются с 0
. См. пример ниже.
Использованиеconst getNumbersReversed = (length, fn = i => i ) => { return Array.from({ length }, (_, i) => fn(length - 1 - i)) }
console.log(getNumbersReversed(10, i => i + 1)) // [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] console.log(getNumbersReversed(10)) // [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]