#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;