2011-05-02 141 views
1

我试过做delete weapons[i];,但即使做我做的weapons.length我仍然得到1.即使它应该是0.我该如何从weapons[]数组中删除数组?JavaScript删除阵列

我梳过的武器阵列通过这样做:

 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 && searchWeapon[2] == X) { 
       delete weapons[i]; 
      }   
      } 

,我存储每个数组作为3|10|4其中3是武器ID,10是Y和4是X.

回答

3

退房的.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 && searchWeapon[2] == X) { 
    weapons.splice(i,1); 
    }   
} 
+1

谢谢你。拼接做到了。 Splice也是一部可怕的电影。 – nn2 2011-05-02 23:40:07

+1

链接到[MDC](https://developer.mozilla.org/en/JavaScript)而不是[W3FOOLS](http://w3fools.com/)。 [Splice](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice) – 2011-05-03 00:06:51

0

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] 
4

如果阵列不需要进行排序,你可以使用array.pop()因为它速度非常快。

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

这种方法不需要你已经什么splice()'d后重新索引一切,所以你的阵列是否为5或35万长度仍然快速。

+0

好的一段代码。但是,在现实世界中,这比“拼接”更快吗? – 2011-05-02 23:37:33

+0

是的.. **很快**。那么,取决于你的数组的长度。 pop()始终是相同的速度,而拼接速度随着数组长度变慢。 – Marty 2011-05-02 23:38:58

+0

很酷。谢谢。向上投票支持小费。 – 2011-05-02 23:42:36

0

从数组中删除元素使用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" 
+0

好的老splace方法。 – Marty 2011-05-02 23:37:19

+0

LOL。是的,当然:'Array.prototype.splace = Array.prototype.splice;' – 2011-05-02 23:41:33

+0

好节省,哈哈。 – Marty 2011-05-02 23:42:12