Есть несколько минут? Отлично, давайте рассмотрим 27 распространенных методов массивов, нотаций и операторов в JavaScript.
Предстоит еще многое повторить, так что вот самое быстрое определение массива, которое я могу найти. Массив — это структура данных, которая может содержать несколько элементов под одним именем переменной, например. мой массив = [1, 2, 3]). В JavaScript массивы «изменяемы», то есть их можно изменять напрямую, не создавая новый. По мере того, как мы будем рассматривать каждый метод, я сообщу вам, мутирует ли он исходный массив или нет (т. е. деструктивный или недеструктивный). Давайте приступим!
Создайте новый массив с литеральной записью или методом конструктора
Если вы попросите большинство разработчиков JavaScript создать массив, они, вероятно, напечатают что-то вроде этого:
let myArray = ['a', 'b', 'c']
Это называется «буквальная запись». Другой способ сделать то же самое — «конструктор массива»:
let myArray2 = new Array('d', 'e', 'f')
Стоит знать, что конструктор существует, но большинство людей не используют его, потому что он дольше печатается и выдает неожиданные результаты при передаче одного целого числа.
Преобразуйте что-то еще в массив с помощью .split()
или Array.from()
Зачем создавать новый массив, если можно обновить старую строку или коллекцию?
Используйте .split()
, чтобы разбить строку на части и вернуть массив. Аргумент — это символ (символы), которые вы хотите разделить, пробел “ ”
в этом примере.
letarrayFromString = "Charles Philip Arthur George".split(" ")
arrayFromString == ['Charles', 'Philip', 'Arthur', 'George']
Используйте Array.from()
, чтобы превратить подобный массиву объект (такой как Set или DOM-список узлов ) в настоящий массив.
letmySet = new Set('z')
letmyArray = Array.from(mySet)
myArray== ['z']
Восемь способов узнать, что находится в массиве
Ищете что-то?
let newArray = [1, 2, 2, 2, 3]
Давайте поищем в приведенном выше массиве следующими методами:
newArray[0] => 1 //returns whatever is at the index in the [] brackets newArray.at(-1) => 3 //Similar to using the square brackets, but it lets you pass in a negative number to get the last element newArray.find( x => x > 1) => 2 //returns the first element that meets the condition newArray.includes(2) => true // tells you whether that value is in the array newArray.every( x => x > 1) => false // tells you whether each and every element in the array meets the condition newArray.indexOf(2) => 1 // returns the index of the first element that equals the value you pass in newArray.findIndex( x => x > 1) => 1 // returns the index just like indexOf(), but you can pass in a callback if you’re search for something that meets a certain condition, rather than a specific value. newArray.length => 5 // tells you how many items are in the array. This is a property, not a method, so don’t use parentheses
Добавить что-то или удалить что-то из массива с помощью push(), pop(), shift() и unshift()
Все методы push(), pop(), shift() и unshift() изменяют массив, добавляя или удаляя элемент.
let newArray = [0] newArray.push(1) // add something to the end newArray == [0, 1] newArray.unshift(2) // add something to the beginning newArray == [2, 0, 1] let popped = newArray.pop() // take the last value off the end popped == 1 newArray == [2, 0] let shifted = newArray.shift() //take 1st value off the beginning shifted == 2 newArray == [0]
Объедините два массива вместе с помощью concat() или оператора расширения …
let arr = [1,2,3]
Используйте метод concat(), если вы не хотите, чтобы исходный массив изменялся.
let combined = arr.concat(['a','b','c']) combined == [1, 2, 3, 'a', 'b', 'c'] arr == [1, 2, 3] //original has not changed
Вы также можете нажать() на содержимое другого массива. Используйте оператор расширения …
для извлечения содержимого из этого массива, чтобы не получить вложенные массивы.
arr.push(...['x','y','z']) arr = [1, 2, 3, 'x', 'y', 'z'] // this mutates the original
Измените порядок с помощью sort() и reverse()
let a = [1,4,3,5,2]
Метод sort()
сортирует элементы массива на месте и возвращает массив.
a.sort() a == [1, 2, 3, 4, 5] //original has been changed
Метод reverse()
меняет местами элементы массива и возвращает массив
a.reverse() a == [5, 4, 3, 2, 1] // original has been changed
Возьмите кусок массива с помощью Slice() или Splice()
Они сбивают с толку, потому что звучат одинаково. Оба метода возвращают часть массива в виде нового массива. Одно отличие состоит в том, что slice()
получает элементы неразрушающим образом, а splice()
удаляет элементы деструктивно. Другим основным отличием являются аргументы, как показано в примерах:
Кусочек()
let myArray = [1, 2, 3, 4, 5] let sliced = myArray.slice(3,4) //from index 3 up to index 4 sliced == [4] // the removed item myArray == [1, 2, 3, 4, 5] // original has not been changed
Сращивание ()
let myArray2 = [1, 2, 3, 4, 5] let spliced = myArray2.splice(3,1) // at index 3 remove 1 item spliced == [4] // the removed item myArray2 == [1, 2, 3, 5] // items are gone from the original
Вы также можете использовать splice()
для добавления или замены элементов в массиве. Передайте новое дополнение в качестве третьего аргумента.
let array = [10, 20, 30] array.splice(0,1,'ten') // At index 0 remove 1 item and insert ‘ten’ array == ['ten', 20, 30] array.splice(1, 0, 15) // At index 1 remove 0 items and insert 15 array == ['ten', 15, 20, 30]
Упростите жизнь с помощью map(), filter() и reduce().
Вы не столкнетесь с этими популярными методами при работе со старым унаследованным кодом. Они были частью основной версии JavaScript под названием ECMAScript 6 или ES6, вышедшей в 2015 году.
Все эти методы принимают функцию обратного вызова в качестве аргумента, которую они используют для неразрушающего действия с массивом.
let array = [1,2,3,2,1]
map() возвращает новый массив каждого элемента, обработанного обратным вызовом
let mapped = array.map( x => x * 10) mapped == [10, 20, 30, 20, 10] array = [1, 2, 3, 2, 1] // original has not changed
Вы также можете использовать второй параметр для индекса каждого элемента массива:
let mapped2 = array.map((x,i) => i) mapped2 == [0, 1, 2, 3, 4]
filter() возвращает массив всех элементов, удовлетворяющих условию
let filtered = array.filter( x => x > 1) filtered == [2, 3, 2] array == [1, 2, 3, 2, 1] // original has not changed
reduce() выполняет операцию над каждым элементом и возвращает конечный результат
let reduced = array.reduce( (current,next) => current + next) reduced == 9 array == [1, 2, 3, 2, 1] // original has not changed
Сделайте что-нибудь еще с каждым элементом в массиве, используя forEach()
Метод forEach() — это еще один метод ES6. Это как классический цикл for
, но гораздо короче.
array1 = [ 5, 10, 15, 20] array1.forEach(x => console.log(x)) 5 10 15 20
Обратите внимание, что forEach()
запускает указанную вами функцию, но фактически ничего не возвращает. Это также неразрушающе.
До свидания, массив
let myArray = ['b','y','e']
Теперь, когда мы сделали все, что нужно, с нашими массивами, давайте превратим один в строку. метод join() объединяет все элементы массива в строку, помещая переданный вами аргумент между элементами. В данном примере это ничего.
let myString = myArray.join('') myString == 'bye'
Итак, у вас есть это. Мы использовали всевозможные методы для создания, поиска и изменения массивов и, наконец, взяли массив и превратили его в строку.
О, подожди. На самом деле он не ушел, потому что этот метод неразрушающий.
myArray == ['b', 'y', 'e']