Оператор 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
.
Соединение массива # (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
является неразрушающим и возвращает новый массив, содержащий указанные индексы от start
до 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]
Массив # pop
Array#pop
удаляет последний элемент из массива и возвращает этот элемент. Эта операция изменяет длину массива.
coderhelper.com/questions/66047314/… Проверьте эту ссылку. Он имеет дело с чем-то очень похожим
удалить myObject.regex; // или удалим myObject ['regex']; // или, var prop = "regex"; удалить myObject [prop];