Мутирующие и иммутабельные массивы Flashcards

1
Q

Мутирующие и иммутабельные методы массивов

A

push(), pop(), shift(), unshift(), reverse(), sort() - мутирующий метод массива
split(), concat(), filter() - не мутирует
push() - добавляет один или более элементов в конец массива.
Если присваиваем результат выполнения, то увидим длину массива.
pop() - удаляет последний элемент массива. Если присваиваем результат выполнения, то увидим элементы, которые мы удалили.
shift() - удаляет первый элемент в массиве. Если присваиваем результат выполнения, то увидим элементы, которые мы удалили.
unshift() - один или более элементов в начало массива. Если присваиваем результат выполнения, то увидим длину массива.

reverse() -перевернуть порядок слов, поменять порядок на обратный.

split() - работает не только с массивом, но и со строкой. Преобразует строку в массив, по разделителю, который мы указали. Указываться может разделитель + лимит (сколько элементов, хотим увидеть)
split(“”) - элементы делятся по-символьно.
split() - если пусто, то строка превращается в массив.

join() - метод массива, объединяет строку и массив.
//1
const names = [‘Alex’, ‘Bob’, ‘Ivan’, ‘Sasha’];
const joinResult = names.join(“-“)
console.log(“joinResult: “, joinResult) //joinResult: Alex-Bob-Ivan-Sasha (на выходе строка)
//2
const names = [‘Alex’, ‘Bob’, ‘Ivan’, ‘Sasha’]
const joinResult = names.join();
console.log(“joinResult: “, joinResult) //joinResult: Alex,Bob,Ivan,Sasha
//3
const names = [‘Alex’, ‘Bob’, ‘Ivan’, ‘Sasha’]
const joinResult = names.join(“”)
console.log(“joined: “, joinResult) //joined: AlexBobIvanSasha

concat() - позволяет присоединить один массив к другим массивам.
flat() - позволяет убрать уровень вложенности в массиве.
Если передаем пустой, то раскрывает один ровень вложенности. В скобках мы указываем, уровень вложенность массива вложенности массива.
flat(Infinity) - убираем все уровни вложенности.

forEach() - перебирает каждый элемент в массиве.
arr.forEach(function(el, index, arr) => {} )
Пример:
const arr = [1,2,3,4,5]
let sum = 0
arr.forEach(function (el) {
sum += el
})
console.log(“sum:”, sum)

Пример:
const numbers = [1, 2, 3]
numbers.forEach((num, index, array) => {
array[index] = num * 2
})

console.log(‘numbers’, numbers) // [ 2, 4, 6 ]

Чем отличается forEach() от map()
map() -возвращает новый массив.

indexOf() - находит индекс элемента
const arr = [1,2,3,4,5]
const res = arr.indexOf(3)
console.log(res) //2
Если пытаемся в массиве найти элемент, которого нет, то результат будет -1

lastIndexOf() - осуществляется поиск элемента с конца.
Если пытаемся в массиве найти элемент, которого нет, то результат будет -1
const arr = [1, 2, 4, 3, 4, 5]
const res = arr.lastIndexOf(4)
console.log(res) //4

find() -принимает также колбэк, позволяет найти элемент в массиве согласно переданному условию. В результате получим первое переданное совпадение. Если нет в массиве данного совпадения, то получаем undefined.
//1
const strArr = [“str”, “scferfc”, “fgfgf”, “dff”, “fdcklfrcvfl”];
const res = strArr.find((el) => {
return el.length === 3
})
console.log(res) //str
//2
const arr = [1, 2, 3, 4, 5];
const res = arr.find((num) => {
return num % 2 === 0 (остаток от деления на 2)
})
console.log(res) //2

includes() - для проверки элемента в массиве (true/false)
const num = [1, 2, 3, 4, 5]
const result = num.includes(5)
console.log(“result: “, result) //result: true

filter() - не мутирующий, возвращает новый массив, проходится по каждому элементу нашего массива и проверяет по условию.
const words = [“spray”, “elite”, “exuberant”, “destruction”, “present”]
const result = words.filter(str => str.length > 5);
console.log(result) //[ ‘exuberant’, ‘destruction’, ‘present’ ]

sort() - сортирует элементы массива.
1) может сортировать без доп параметров по табличке unicode (в основном формирует по этой табличке);
2)мутирует исходный массив (мутабельный метод массива);
const names = [‘Alex’, ‘!alex’, “alex”, “Виктор”, “Dimych”, “Valera”, “Igor”, “Ignat”]
console.log(names.sort())
// [
// ‘!alex’, ‘Alex’,
// ‘Dimych’, ‘Ignat’,
// ‘Igor’, ‘Valera’,
// ‘alex’, ‘Виктор’
// ]
const nubers = [1, 2, -3525523, -3, 15213]
console.log(nubers.sort()) //[ -3, -3525523, 1, 15213, 2 ]
const names = [‘Alex’, “alex”]
console.log(names.sort()===names) //true

Сортировка по возрастанию
a,b -соседние числа друг с другом, a - b < 0, а ставит наименьший индекс.
const numbers = [1, 2, -3525523, -3, 15213]
const result = numbers.sort((a,b) => a - b)
console.log(result) //[ -3525523, -3, 1, 2, 15213 ]

Сортировка по убыванию
const numbers = [1, 2, -3525523, -3, 15213]
const result = numbers.sort((a,b) => b - a)
console.log(result) //[ 15213, 2, 1, -3, -3525523 ]

localeCompare() - ф-ция для строк сортировки, позволяет получить сортировку, которая не зависит от регистра - более точная. Сравнивает две строки, по текущей локалии и не зависит от регистра.

Пример. Сначала маленький потом большой регистр
const users = [
{
id: 1,
name: ‘Bob’,
isStudent: true
},
{
id: 2,
name: ‘Alex’,
isStudent: true
},
{
id: 3,
name: ‘alex’,
isStudent: true
},
{
id: 4,
name: “Виктор”,
isStudent: true
},
{
id: 5,
name: “виктор”,
isStudent: true
}
]

console.log(users.sort((a, b) => a.name.localeCompare(b.name)))
// [
// { id: 5, name: ‘виктор’, isStudent: true },
// { id: 4, name: ‘Виктор’, isStudent: true },
// { id: 3, name: ‘alex’, isStudent: true },
// { id: 2, name: ‘Alex’, isStudent: true },
// { id: 1, name: ‘Bob’, isStudent: true }
// ]

Пример. Сначала большой регистр, потом маленький (просто необходимо будет поменять a и b)

console.log(users.sort((a, b) => b.name.localeCompare(a.name)))

[
{ id: 1, name: 'Bob', isStudent: true },
    { id: 2, name: 'Alex', isStudent: true },
    { id: 3, name: 'alex', isStudent: true },
    { id: 4, name: 'Виктор', isStudent: true },
    { id: 5, name: 'виктор', isStudent: true }
]

toSorted() - работает иммутабельно работатет точно также как и sort. На разных версиях nodeJS - может и не поддерживаться.

map - создает новый массив, заполненный результатами вызова предоставленной функции для каждого элемента вызывающего массива..

How well did you know this?
1
Not at all
2
3
4
5
Perfectly