Удалить элемент из массива js
Есть массив и ф-ция, нужно удалять элементы с массива, я понимаю что delete удаляет элемент но после него образовывается «дырка», как его полностью удалить?
var myArr = [1, 2, 3, 6, 7, 13, 349, 3483, 5432]; var doubledOdds = onlyDoubledOdds(myArr); console.log(doubledOdds.length); console.log(doubledOdds); if (doubledOdds === myArr) < console.log('WTF?!'); >else < console.log('Ok'); >function onlyDoubledOdds(sourceArray) < var result = sourceArray; for (var i = 0; i < result.length; i++) < if (i % 2 == 0) < delete result[i]; >else < result[i] *= 2; >> return result; >
а вообще оно выводит 9
[ undefined, 4, undefined, 12, undefined, 26, undefined, 6966, undefined ]
WTF?! А нужно:
6
[ 2, 6, 14, 26, 698, 6966 ]
Ok
Отслеживать
81.1k 9 9 золотых знаков 78 78 серебряных знаков 135 135 бронзовых знаков
задан 11 июл 2016 в 9:04
61 1 1 золотой знак 1 1 серебряный знак 7 7 бронзовых знаков
delete оператор удаляет из памяти, а не из массива. из массива удаляют процедуры, относящиеся к классу массива ( array ), например pop
11 июл 2016 в 9:09
а что должна делать приведенная функция?
11 июл 2016 в 9:11
Про splice знаю, не могу понять как правильно записать. if (i%2 == 0) < result.splice[i]; >
11 июл 2016 в 9:20
@Webitek, а по какому принципу построен массив А нужно: 6 [ 2, 6, 14, 26, 698, 6966 ] ?
11 июл 2016 в 9:24
а почему он должен выбирать число 13? есть описание словами как из исходного массива получить результат?
11 июл 2016 в 10:33
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Для удаления можно использовать специальные методы, такие как
- shift — удалит из начала
- pop — с конца
- splice — из середины
C помощью splice — как раз можно удалять элементы, вставлять элементы, заменять элементы – по очереди и одновременно.
Синтаксис таков:
arr.splice(start[, countDelete[, elemInsert1, . elemInsertN]])
т.е. удалить countDelete элементов, начиная с номера start , а затем вставить elemInsert1, . elemInsertN на их место. Если countDelete не указано, то отрежется все, начиная со start и до конца. Возвращает массив из удалённых элементов.
Пример с удалением выглядит так:
var arr = ["Привет", "тебе", "Миша"]; arr.splice(1, 1); // начиная с позиции 1, удалить 1 элемент alert( arr ); // осталось ["Привет", "Миша"]
var arr = ["Привет", "тебе", "мальчик", "Миша"]; // удалить 3 первых элемента и добавить другие вместо них arr.splice(0, 3, "Здароф!") alert( arr ) // теперь ["Здароф!", "Миша"]
Отслеживать
81.1k 9 9 золотых знаков 78 78 серебряных знаков 135 135 бронзовых знаков
ответ дан 11 июл 2016 в 9:16
Алексей Шиманский Алексей Шиманский
72k 12 12 золотых знаков 91 91 серебряный знак 180 180 бронзовых знаков
При применении оператора delete не изменяется свойство length массива, поэтому при использовании длины в цикле — разницы не будет.
Функция onlyDoubledOdds делает что-то непонятное, в зависимости от индекса элемента, причем меняет исходный массив, поэтому при сравнении возвращенное значение закономерно равно переданному, а не «WTF»
Если нужно отфильтровать массив — можно воспользоваться функцией filter,
если нужно получить массив на основе существующего, но с другими элементами — можно воспользоваться функцией map,
если хочется за один проход, можно воспользоваться функцией reduce
var myArr = [1, 2, 3, 6, 7, 13, 349, 3483, 5432]; var doubledOddsMapFilter = onlyDoubledOddsMapFilter(myArr); console.log('doubledOddsMapFilter.length', doubledOddsMapFilter.length); console.log('doubledOddsMapFilter', doubledOddsMapFilter); if (doubledOddsMapFilter === myArr) < console.log('WTF?!'); >else < console.log('Ok'); >var doubledOddsReduce = onlyDoubledOddsReduce(myArr); console.log('doubledOddsReduce.length', doubledOddsReduce.length); console.log('doubledOddsReduce', doubledOddsReduce); if (doubledOddsReduce === myArr) < console.log('WTF?!'); >else < console.log('Ok'); >function onlyDoubledOddsMapFilter(sourceArray) < return sourceArray.filter((el, i) =>i % 2 != 0).map(el => el * 2); > function onlyDoubledOddsReduce(sourceArray) < return sourceArray.reduce((acc, el, i) =>< if (i % 2 != 0) acc.push(el * 2); return acc; >, []); >
UPDATE: так как начальное решение в вопросе было с ошибкой, то примеры выше ориентирующиеся на пример в вопросе так же ошибочны, проверяться должен сам элемент а не индекс.
var myArr = [1, 2, 3, 6, 7, 13, 349, 3483, 5432]; var doubledOddsMapFilter = onlyDoubledOddsMapFilter(myArr); console.log('doubledOddsMapFilter.length', doubledOddsMapFilter.length); console.log('doubledOddsMapFilter', doubledOddsMapFilter); if (doubledOddsMapFilter === myArr) < console.log('WTF?!'); >else < console.log('Ok'); >var doubledOddsReduce = onlyDoubledOddsReduce(myArr); console.log('doubledOddsReduce.length', doubledOddsReduce.length); console.log('doubledOddsReduce', doubledOddsReduce); if (doubledOddsReduce === myArr) < console.log('WTF?!'); >else < console.log('Ok'); >function onlyDoubledOddsMapFilter(sourceArray) < return sourceArray.filter(el =>el % 2 != 0).map(el => el * 2); > function onlyDoubledOddsReduce(sourceArray) < return sourceArray.reduce((acc, el) =>< if (el % 2 != 0) acc.push(el * 2); return acc; >, []); >
Массивы
Задача. Заменить отрицательные элементы на противоположные по знаку. Для этого опишем процедуру. Ей будем передавать параметры — количество элементов в массиве и массив, который будет также и результатом выполнения процедуры, так как некоторые его элементы могут быть заменены.
| Procedure Zamena (Var m : MyArray; n:integer); Var i : integer; Begin for i := 1 to n do if m[i] < 0 then m[i] := -m[i]; End; |
Нахождение номеров элементов с заданным свойством
Задача. Найти и вывести на экран номера четных элементов. Для решения задачи необходимо просмотреть весь массив, и если просматриваемый элемент является четным, то выводить его номер.
| Procedure PoiskChet(m : MyArray; n:integer); Var i : integer; Begin for i := 1 to n do if m[i] mod 2 =0 then Write(i:5); End; |
Нахождение количества элементов с заданным свойством
Задача. Найти количество положительных и отрицательных элементов в данном массиве. Опишем процедуру, которой будем отправлять параметры — массив, количество элементов в массиве и два счетчика, один для элементов, больших нуля, а второй — для отрицательных элементов.
| Procedure OtrPol(m : MyArray; n:integer; Var k1, k2 : Integer); Var i : integer; Begin k1 :=0; k2 :=0; for i := 1 to n do if m[i] > 0 then Inc(k1) else if m[i] < 0 then Inc(k2); End; |
Есть ли в данном массиве элементы с данным свойством?
Для решения таких задач удобнее использовать циклы с условиями и составлять функции, результат которых имеет логический тип. Задача. Есть ли отрицательный элемент в массиве? Начинаем с первого элемента (i=1). Пока не просмотрен последний элемент (i<=n) и не найден отрицательный (m[i]>=0), будем переходить к следующему (Inc(i)). Таким образом, мы закончим просмотр массива в одном из двух случаев: первый – просмотрели все элементы и не нашли отрицательный, тогда i>n, второй – нашли нужный, при этом i
| Function Control (m : MyArray; n:integer) : Boolean; Var i : integer; Begin i := 1; while (i<=n) and (m[i]>0) do Inc(i); Control := (i<=n); End; |
Как удалить определенный элемент из массива js
Правильным способом удаления элемента из массива будет использование метода splice() . Этот метод принимает три аргумента, но нам нужны только первые два из них. Это индекс начиная с которого мы хотим удалить элементы. А также количество элементов, которые будут удалены из массива. Взгляните на пример ниже:
const letters = ["a", "b", "c"]; const index = 1; array.splice(index, 2); console.log(letters); // => [ 'a' ]
18 октября 2022
Часто бывает в задачах, что нам требуется удалить из массива определенный элемент.
Один из способов — это воспользоваться функцией высшего порядка filter:
// К примеру, дан массив из чисел: const numbers = [1, 2, 3, 4, 5]; //необходимо удалить элемент, который равен трём. const numberToDelete = 3; //фильтруем исходный массив. //А для того, чтобы его не мутировать, присвоим его в новую переменную. const filteredNumbers = numbers.filter((number) => number !== numberToDelete); console.log(filteredNumbers); // => [1, 2, 4, 5] //Готово!
Также есть самый явный способ для удаления элемента массива с помощью ключевого слова delete:
let fruits = ['banana', 'orange', 'apple']; //Допустим, что нам нужно удалить нулевой элемент массива. delete fruits[0]; console.log(fruits); // => [ , 'orange', 'apple' ]
Обратите внимание, что на месте нулевого элемента осталось пустое место. Как правило, удалять элемент массива таким способом не является хорошей практикой. Данный способ приведен в качестве примера.
Если вам нужно удалить последний элемент массива, для этого есть способ — это метод pop(). Перейдём к примеру:
const fruits = ['banana', 'orange', 'apple']; fruits.pop(); console.log(fruits); // получаем => [ 'banana', 'orange' ]
Но это еще не всё!
Одним из наиболее удобных методов для удаления элемента массива является метод splice():
const names = ['John', 'Darina', 'Mark', 'Kris']; //допустим, что дан массив имён. // Нам необходимо удалить из массива второй элемент. names.splice(2, 1); // начиная со второго элемента удаляем один элемент console.log(names); // => [ 'John', 'Darina', 'Kris' ]
Это не все способы удаления элементов из массива, но и среди указанных можно найти метод по душе или же придумать что-то свое.
Документация:
- Функция высшего порядка filter
- Метод splice()
- Метод pop()
Удаление элемента из массива по значению в JavaScript

Часто в программировании возникает ситуация, когда необходимо удалить элемент из массива, не зная его индекс, но зная его значение. Например, есть массив цветов:
let colors = ['red', 'blue', 'green', 'yellow'];
И нужно удалить из него цвет ‘green’.
В JavaScript метод splice() позволяет удалить элемент из массива, но он требует знания индекса элемента. Если необходимо удалить элемент по значению, подходящего стандартного метода не существует. Но это можно сделать, например, с помощью комбинации методов indexOf() и splice() .
Метод indexOf()
Метод indexOf() возвращает первый индекс, по которому данный элемент может быть найден в массиве, или -1, если такого индекса нет.
let index = colors.indexOf('green');
В этом примере index будет равен 2, так как ‘green’ находится на позиции с индексом 2. Если бы ‘green’ не было в массиве, index был бы равен -1.
Метод splice()
Зная индекс, можно применить метод splice() , который изменяет содержимое массива, удаляя существующие элементы и/или добавляя новые.
if (index !== -1)
В этом примере splice() удаляет один элемент, начиная с позиции index .
Таким образом, комбинируя indexOf() и splice() , можно удалить элемент из массива по его значению.