2010-08-04 75 views
0

var a = new array(); a [1] ='A'; '0'='B'; b [10] ='B'; console.log(a); /[未定義, 「A」,未定義未定義,未定義未定義,未定義未定義, 未定義未定義, 「B」]/ 我想刪除未定義元件 但什麼是過程??javascript數組索引問題!

回答

6

首先,jQuery與此無關。

其次,數組是「自動填充的」。如果您定義索引10,則所有索引0 - 9將自動佔用,這正是Javascript數組的工作方式。

什麼你正在尋找可能是一個對象:

var a = {}; 
a[1] = 'A'; 
a[10] = 'B'; 

var a = { 
    1 : 'A', 
    10 : 'B' 
}; 
+0

但我需要的值列表 – 2010-08-04 06:41:43

1

好,以消除那些undefined部位做

a[0] = 'A'; 
a[1] = 'B'; 

在你的代碼片段,你充滿指數10迫使ECMAScript中與10 fields創建一個數組的元素。沒有關於110之間的所有字段的定義,這意味着這些字段正確undefined

要刪除那些字段,您必須設置適當的值或mapnon-undefined值到一個新的數組中,如果您首先創建了一個正確的數組,那麼這個數組就是不必要的。

創建一個真正的object而不是一個數組(實際上也是一個對象)以獲得所需的行爲。

var a = {}; 

a[1] = 'A'; 
a[2] = 'B'; 

console.log(a); 
+0

但我需要索引編號,所以我做了:( – 2010-08-04 06:33:51

1

在這種情況下,你可以使用一個Object代替Array像這樣:

var a = {}; // or var a = new Object(); 
a[1] = 'A'; 
a[10] = 'B'; 
a['foo'] = 'bar'; 
a.bar = 'foo'; // same as a['bar'] = 'foo'; 
console.log(a); 
1

數組始終從0開始,然後上升到最後填充的索引。 你可以使用一個對象來解決問題:

var a = {}; 
a[1] = 'A'; 
a[10] = 'B';