deleteОператор используется для удаления свойств из объектов.
const obj = { foo: "bar" }
delete obj.foo
obj.hasOwnProperty("foo") // false
Обратите внимание, что для массивов это не то же самое, что удаление элемента . Чтобы удалить элемент из массива, используйте Array#spliceили Array#pop. Например:
arr // [0, 1, 2, 3, 4]
arr.splice(3,1); // 3
arr // [0, 1, 2, 4]
подробности
deleteв JavaScript функция отличается от функции ключевого слова в C и C ++: он не освобождает память напрямую. Вместо этого его единственной целью является удаление свойств из объектов.
Для массивов удаление свойства, соответствующего индексу, создает разреженный массив (т. Е. Массив с «дырой» в нем). Большинство браузеров представляют эти отсутствующие индексы как «пустые».
var array = [0, 1, 2, 3]
delete array[2] // [0, 1, empty, 3]
Обратите внимание, что deleteне перемещается array[3]в array[2].
Различные встроенные функции в JavaScript по-разному обрабатывают разреженные массивы.
for...in пропустит пустой индекс полностью.
Традиционный forцикл возвращает undefinedзначение в индексе.
Любой использующий метод Symbol.iteratorвернёт undefinedзначение в индексе.
forEach, mapИ reduceпросто пропустить отсутствующий индекс.
Таким образом, deleteоператор не должен использоваться для общего случая удаления элементов из массива. Массивы имеют специальные методы для удаления элементов и перераспределения памяти: Array#splice()и Array#pop.
Array # splice (start [, deleteCount [, item1 [, item2 [, ...]]]])
Array#spliceмутирует массив и возвращает все удаленные индексы. deleteCountэлементы удаляются из индекса startи item1, item2... itemNвставляются в массив из индекса start. Если deleteCountопущен, то элементы из startIndex удаляются до конца массива.
let a = [0,1,2,3,4]
a.splice(2,2) // returns the removed elements [2,3]
// ...and `a` is now [0,1,4]
Существует также же названием, но другой, функция на Array.prototype: Array#slice.
Array # slice ([начало [, конец]])
Array#sliceявляется неразрушающим и возвращает новый массив, содержащий указанные индексы, из startto end. Если endне указан, по умолчанию используется конец массива. Если endоно положительное, оно указывает нулевой не включающий индекс, на котором стоит остановиться. Если endоно отрицательное, оно указывает индекс, на котором нужно остановиться, начиная отсчет с конца массива (например, -1 опускает конечный индекс). Если end <= start, результат - пустой массив.
let a = [0,1,2,3,4]
let slices = [
a.slice(0,2),
a.slice(2,2),
a.slice(2,3),
a.slice(2,5) ]
// a [0,1,2,3,4]
// slices[0] [0 1]- - -
// slices[1] - - - - -
// slices[2] - -[3]- -
// slices[3] - -[2 4 5]
Массив # поп
Array#popудаляет последний элемент из массива и возвращает этот элемент. Эта операция изменяет длину массива.