Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Удаление элемента массива без сдвига индексов (https://javascript.ru/forum/misc/45188-udalenie-ehlementa-massiva-bez-sdviga-indeksov.html)

preproger 18.02.2014 09:39

Удаление элемента массива без сдвига индексов
 
Здравствуйте. Имеется массив со строками.
Содержит, допустим, 50 элементов.

Требуется, чтобы при удалении 25ого элемента он полностью отсутствовал, т.е. в массиве были 1...22,23,24,26,27....50 и не было 25.

Как это сделать? splice не так работает.

Следует ли для этого использовать объект с ключами в виде цифр?

mishgun131 18.02.2014 09:57

Привет,

Почему splice не так работает?

var arr = [1,2,3,4,5,6,7,8,9];

arr.splice(5,1);
console.log(arr); // [1,2,3,4,5,7,8,9] - 6 исчезла.

danik.js 18.02.2014 09:57

delete array[25];


Удалит ключ и значение.

preproger 18.02.2014 10:18

@danik.js, аа!! спасибо большое! то что нужно!! карму пока не могу поднять) кого-то другого нужно плюсануть, чтоб мог опять тебя))

@mishgun131, потому что по arr[5] будет существовать элемент, хотя его значение и будет 7

рони 18.02.2014 11:50

:) вариант - просто как демострация возможности удаления
var arr = [1,2,3,4,5,6,7,8,9]; 
   delete arr[0];
   alert(arr[0])
   alert([arr.length, Object.keys(arr)]);
   var arr = [1,2,3,4,5,6,7,8,9];
   function del(arr, indx)
   {  var ghost = Array();
      for (var i=0; i<arr.length; i++)  {i != indx && (ghost[i]=arr[i])};
      return ghost;
   }
   arr = del(arr, 0)
   alert(arr[0])
   alert([arr.length, Object.keys(arr)]);

FanAizu 06.03.2015 16:48

Цитата:

Сообщение от danik.js
delete array[25];


Удалит ключ и значение.

Удалит только значение, а ключ останется. Эта же проблема возникла, splice сдвигает индексы при удалении, а delete удаляет только значение элемента, но не его индекс, то есть при delete myVar[1], переменная myVar[1] будет по-прежнему существовать, просто значение будет undefined. Как удалить и индекс и значение без сдвига индексов, простым способом?..

FanAizu 06.03.2015 17:50

Хотя сори, delete и вправду удаляет элемент вместе с индексом, видимо, у меня баг какой-то в коде был просто


Часовой пояс GMT +3, время: 19:51.