2012-01-24 32 views
3

我有以下陣列:JavaScript的:更好的解決方案不是刪除

var example = [ 
    function() { /* hello */ }, 
    function() { /* goodbye */ } 
]; 

我用delete example[0];和左下面的結果是:

var example = [ 
    1: function() { /* goodbye */ } 
]; 

難道還有比delete一個更好的解決辦法?或者有沒有簡單的方法來修復數組中的索引? (我有jQuery在我的處置)

編輯:我修正了示例數組。這個指數就是這個例子。

回答

7

由於example是一個數組,而不是delete,您可以使用.splice[MDN]

example.splice(0, 1); 

但如果examples實際上是一個對象,你必須使用delete,並遍歷所有的屬性和「重命名」他們。儘管使用數組可能更容易。

爲什麼你這個結果與delete的原因是,你是從底層對象和'1'仍然存在的屬性中刪除屬性'0'。你基本上是在較低的水平上運作。

索引間隙的另一個問題是array.length將始終返回最高索引+ 1而不是數組中實際值的數量。所以刪除元素後,example.length仍然是2

+1

'[] .shift()'將正常工作。就像'[] .pop()',如果你想從數組尾部刪除它。 –

+0

這正是我正在尋找的,謝謝。 –

1

您的定義數組的方式是錯誤的。 這是它如何做的:

var example = [ 
    function() { /* hello */ }, 
    function() { /* goodbye */ } 
]; 

你可以用shift刪除第一個元素:

var firstElement = example.shift(); 
0

你可以使用自定義排序功能:

array.sort(sortfunction) 

function sortfunction(a, b){ 
    // check indexes here 
} 
0

你可以移你的第一個元素。

http://jsfiddle.net/4zW7B/1/

var example = [ 
    function() { alert('hello'); }, 
    function() { alert('goodbye'); } 
]; 
example[0](); 
example.shift(); 
example[0](); 
相關問題