Удаление элементов массива в JavaScript - удаление против сращивания

Не обязательно работать

Будет работать

  • Создание сценария - Задачи -> Сгенерировать скрипты . Убедитесь, что вы задали желаемую целевую версию SQL Server на странице Set Scripting Options -> Advanced . Вы также можете выбрать, нужно ли копировать схему, данные или и то, и другое. Обратите внимание, что в сгенерированном скрипте вам может потребоваться изменить папку DATA для файлов mdf / ldf, если вы перемещаетесь из не-экспресс, чтобы выразить или наоборот.
  • Microsoft SQL Server Database Publishing Services - поставляется с SQL Сервер 2005 и выше, я думаю. Загрузите последнюю версию из здесь . Предпосылки: sqlncli.msi / sqlncli_x64.msi / sqlncli_ia64.msi, SQLServer2005_XMO.msi / SQLServer2005_XMO_x64.msi / SQLServer2005_XMO_ia64.msi (скачать здесь ).

1284
задан Peter Mortensen 30 July 2016 в 01:59
поделиться

5 ответов

delete удалит свойство объекта, но не повторно индексирует массив или обновит его длину. Это делает, появляется, как будто это не определено:

> myArray = ['a', 'b', 'c', 'd']
  ["a", "b", "c", "d"]
> delete myArray[0]
  true
> myArray[0]
  undefined

Примечание, что это на самом деле не установлено на значение undefined, скорее свойство, удалено из массива, делание его кажется неопределенным. Chrome dev инструменты ясно дает понять это различие путем печати empty при входе массива.

> myArray[0]
  undefined
> myArray
  [empty, "b", "c", "d"]

myArray.splice(start, deleteCount) на самом деле удаляет элемент, повторно индексирует массив и изменяет его длину.

> myArray = ['a', 'b', 'c', 'd']
  ["a", "b", "c", "d"]
> myArray.splice(0, 2)
  ["a", "b"]
> myArray
  ["c", "d"]
1659
ответ дан Andy Hume 30 July 2016 в 11:59
поделиться

Поскольку удаляют, только удаляет объект из элемента в массиве, длина массива не изменится. Соединение встык удаляет объект и сокращает массив.

следующий код отобразит "a", "b", "неопределенный", "d"

myArray = ['a', 'b', 'c', 'd']; delete myArray[2];

for (var count = 0; count < myArray.length; count++) {
    alert(myArray[count]);
}

принимая во внимание, что это отобразит "a", "b", "d"

myArray = ['a', 'b', 'c', 'd']; myArray.splice(2,1);

for (var count = 0; count < myArray.length; count++) {
    alert(myArray[count]);
}
102
ответ дан andynormancx 30 July 2016 в 11:59
поделиться

От Базовая Ссылка JavaScript 1.5> Операторы> Специальные операторы> оператор delete :

при удалении элемента массива длина массива не затронута. Например, если Вы удаляете [3], [4] все еще [4], и [3] не определено. Это содержит даже при удалении последнего элемента массива (удалите [a.length-1]).

14
ответ дан f3lix 30 July 2016 в 11:59
поделиться

Другие уже правильно соответствовали delete splice.

Другое интересное сравнение delete по сравнению с undefined: удаленный объект массива использует меньше памяти, чем та, которая просто установлена на undefined;

, Например, этот код не закончится:

let y = 1;
let ary = [];
console.log("Fatal Error Coming Soon");
while (y < 4294967295)
{
    ary.push(y);
    ary[y] = undefined;
    y += 1;
}
console(ary.length);

Это производит эту ошибку:

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory.

Так, как Вы видите undefined на самом деле, поднимает память "кучи".

Однако, если Вы также delete ary-объект (вместо того, чтобы просто установить его на [1 110]), код будет медленно заканчиваться:

let x = 1;
let ary = [];
console.log("This will take a while, but it will eventually finish successfully.");
while (x < 4294967295)
{
    ary.push(x);
    ary[x] = undefined;
    delete ary[x];
    x += 1;
}
console.log(`Success, array-length: ${ary.length}.`);

Это экстремальные примеры, но они высказывают мнение приблизительно [1 111], что я не видел, что любой упоминает где угодно.

0
ответ дан 19 December 2019 в 20:16
поделиться

Splice будет работать с числовыми показателями.

В то время как удалить может использоваться против других показателей ..

Пример:

delete myArray['text1'];
9
ответ дан 19 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: