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
является неразрушающим и возвращает новый массив, содержащий указанные индексы, из start
to 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
удаляет последний элемент из массива и возвращает этот элемент. Эта операция изменяет длину массива.