Изменение массива в JavaScript
- Что значит изменить массив
- Замена элемента по индексу
- Индекс в переменной
- Замена через splice()
- Изменение нескольких элементов
- Изменение найденного элемента
- Новый массив через map()
- const и массив
- Что выбрать
- Итого
Изменить массив - значит заменить один или несколько его элементов. Чаще всего это делают по индексу.
let fruits = ['apple', 'orange', 'banana'];
fruits[1] = 'grape';
console.log(fruits); // ['apple', 'grape', 'banana']
Что значит изменить массив
Массив хранит элементы по порядку. Если обратиться к нужному индексу и присвоить новое значение, старый элемент будет заменен.
let colors = ['red', 'green', 'blue'];
colors[0] = 'black';
console.log(colors); // ['black', 'green', 'blue']
В этом примере элемент с индексом 0 изменился с red на black.
Замена элемента по индексу
Для замены элемента нужно указать индекс в квадратных скобках и присвоить новое значение.
let users = ['Анна', 'Олег', 'Мария'];
users[1] = 'Иван';
console.log(users); // ['Анна', 'Иван', 'Мария']
Индексы начинаются с 0, поэтому users[1] - это второй элемент массива.
Если указать индекс, которого еще нет, JavaScript не заменит элемент, а добавит новый.
let users = ['Анна', 'Олег'];
users[2] = 'Мария';
console.log(users); // ['Анна', 'Олег', 'Мария']
Если индекс будет сильно больше длины массива, появятся пустые места. Обычно так делать не нужно.
let users = ['Анна', 'Олег'];
users[5] = 'Мария';
console.log(users.length); // 6
Индекс в переменной
Индекс можно хранить в переменной. Это удобно, когда он получен заранее или посчитан в коде.
let tasks = ['HTML', 'CSS', 'JavaScript'];
let index = 1;
tasks[index] = 'Flexbox';
console.log(tasks); // ['HTML', 'Flexbox', 'JavaScript']
Запись работает так же, как с обычным числом в квадратных скобках.
Замена через splice()
Метод splice() может не только удалять и добавлять элементы, но и заменять их.
let fruits = ['apple', 'orange', 'banana'];
fruits.splice(1, 1, 'grape');
console.log(fruits); // ['apple', 'grape', 'banana']
Первый аргумент - индекс, с которого начинается изменение. Второй - сколько элементов удалить. Все следующие значения вставляются на их место.
fruits.splice(1, 1, 'grape');
В этом примере удаляется один элемент с индексом 1, а вместо него вставляется grape.
Изменение нескольких элементов
Через splice() можно заменить сразу несколько элементов.
let numbers = [10, 20, 30, 40];
numbers.splice(1, 2, 200, 300);
console.log(numbers); // [10, 200, 300, 40]
Здесь с индекса 1 удаляются два элемента: 20 и 30. На их место вставляются 200 и 300.
Изменение найденного элемента
Иногда индекс заранее неизвестен. Тогда сначала можно найти его через findIndex(), а потом заменить элемент.
let users = [
{ id: 1, name: 'Анна' },
{ id: 2, name: 'Олег' },
{ id: 3, name: 'Мария' },
];
let index = users.findIndex((user) => user.id === 2);
if (index !== -1) {
users[index] = { id: 2, name: 'Иван' };
}
console.log(users);
Проверка index !== -1 нужна, потому что findIndex() возвращает -1, если элемент не найден.
Новый массив через map()
Если исходный массив менять не нужно, можно создать новый массив через map().
let prices = [100, 200, 300];
let updatedPrices = prices.map((price) => price + 50);
console.log(updatedPrices); // [150, 250, 350]
console.log(prices); // [100, 200, 300]
map() проходит по каждому элементу и возвращает новый массив с результатами.
Такой подход часто используют, когда нужно обновить данные и не менять исходный массив.
let users = [
{ id: 1, name: 'Анна' },
{ id: 2, name: 'Олег' },
];
let updatedUsers = users.map((user) => {
if (user.id === 2) {
return { ...user, name: 'Иван' };
}
return user;
});
console.log(updatedUsers);
const и массив
Если массив записан в переменную через const, его элементы все равно можно менять.
const fruits = ['apple', 'orange'];
fruits[1] = 'banana';
console.log(fruits); // ['apple', 'banana']
const запрещает присвоить переменной новый массив, но не запрещает менять содержимое уже созданного массива.
const fruits = ['apple', 'orange'];
fruits = ['banana']; // ошибка
Что выбрать
Если известен индекс и можно менять исходный массив, используйте запись через квадратные скобки.
Если нужно заменить несколько элементов подряд, подойдет splice().
Если нужно получить новый массив и оставить старый без изменений, используйте map().
Итого
Массив можно изменять напрямую или создавать новый массив с обновленными значениями.
array[index] = valueзаменяет элемент по индексу.- Если индекса еще нет, такая запись добавит новый элемент.
splice()помогает заменить один или несколько элементов.findIndex()удобно использовать, когда сначала нужно найти элемент.map()создает новый массив и не меняет исходный.constне запрещает изменять элементы массива.