JavaScript удаляет массив

#javascript

#javascript

Вопрос:

Я пытался сделать delete weapons[i]; , но даже когда я делаю weapons.length , я все равно получаю 1. Хотя оно должно быть равно 0. Как мне определенно удалить массив из weapons[] массива?

Я просматриваю массив оружия, делая это:

         for (var i = 0, setsLen = weapons.length; i < setsLen;   i ) {

             var searchWeapon = weapons[i].split("|");
             // console.log('[' i '] >> Weapon ID: '   searchWeapon[0]   ' | Y: '   searchWeapon[1]   ' | X: '   searchWeapon[2]);    
             if (searchWeapon[1] == Y amp;amp; searchWeapon[2] == X) { 
                delete weapons[i];
             }           
            }
  

и я сохраняю каждый массив как, 3|10|4 где 3 это идентификатор оружия, 10 это Y, а 4 это X.

Ответ №1:

Проверьте метод .splice

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice

Используя ваш пример:

 for (var i = 0, setsLen = weapons.length; i < setsLen;   i ) {
  var searchWeapon = weapons[i].split("|");
  if (searchWeapon[1] == Y amp;amp; searchWeapon[2] == X) { 
    weapons.splice(i,1);
  }           
}
  

Комментарии:

1. Спасибо вам за это. Соединение сделало свое дело. Также Splice был ужасным фильмом.

2. Ссылка на MDC , а не на W3FOOLS . Сращивание

Ответ №2:

Используйте splice

 array.splice(index,howmany)
  

Ответ №3:

Если ваш массив не нуждается в сортировке, вы могли бы использовать array.pop() , поскольку это чрезвычайно быстро.

 if(index == array.length-1) array.pop();
else array[index] = array.pop();
  

Этому методу не нужно переиндексировать все после того, что у вас есть splice()'d , поэтому он остается быстрым, независимо от того, имеет ли ваш массив длину 5 или 350 000.

Комментарии:

1. Хороший фрагмент кода. Но действительно ли это значительно быстрее, чем splice в контексте реального мира?

2. ДА.. Намного быстрее. Ну, в зависимости от длины вашего массива. pop() всегда работает с одинаковой скоростью, тогда как сращивание замедляется с увеличением длины массива.

3. Никаких проблем.. Это больше то, о чем следует помнить разработчикам игр, когда вы перечисляете 500-1000 снарядов и прочее, ха-ха.

Ответ №4:

Дополнение к ответам выше: вы должны пройти массив от конца до начала, иначе вы пропустите элементы внутри цикла, если элемент был удален. Демонстрация:http://jsfiddle.net/doktormolle/2f9Ye /

Ответ №5:

delete редактирование элемента массива оставляет после себя дыру, undefined оставленную на месте элемента. Вы, вероятно, захотите использовать Array.splice .

 var myArray = [1,2,3];
delete myArray[1]; // myArray is now [1, undefined, 3];

var myArray2 = [1,2,3];
myArray2.splice(1,1); // myArray2 is [1, 3]
  

Ответ №6:

Чтобы удалить элемент из массива, используйте splace метод. Пример:

 var myArr = ["apple", "orange", "pear"];
alert(myArr.length); // 3
myArr.splice(1,1); // start at 1th index (i.e 2nd element), remove 1 element
alert(myArr.length); // 2
for (var i=0; i<myArr.length; i  ) alert(myArr[i]); // "apple", "pear"
  

Комментарии:

1. LOL. Да, конечно: Array.prototype.splace = Array.prototype.splice;