2015-09-05 41 views
-1

在我的代碼初始化數組,然後把它裏面的值爲什麼輸出爲0?儘管這應該是1如何獲取正確的數組長度

 var changedfields=[]; 
     changedfields['product']="productname"; 
     alert(changedfields.length); 
+1

你是混亂的對象和數組。 – saadq

回答

0

你正在創建一個關聯數組(正常的數組有一個數字索引),但實際上是試圖構建一個HashMap(一個鍵值對)。使用對象或ES6 Maps

我希望下面的例子將幫助你:

var changedfields = {}; // create an object 
changedfields['product']="productname"; 
var keys = Object.keys(changedfields); // returns the keys of the object ['product'] 
alert(keys.length); 

我建議閱讀更多關於JavaScript中的數據結構,避免一般性關聯數組。

+0

thanks.bro您的答案是正確的 –

+0

@amgadatef不客氣:) –

0

你的問題很有趣。以下是答案。

首先在Javascript中的數組是對象類型。

您寫的第一行創建一個空數組,它的類型是object。

var changedfields=[]; 

你寫第二行創建了一個名爲產品 changedfields財產,並將其值設爲產品名稱。它允許您添加產品屬性,因爲JavaScript Array類型是對象。如果你剛剛有var changedfields;你無法添加此屬性。

changedfields['product']="productname"; 

您寫的第三行只是簡單地查找空數組的長度。

alert(changedfields.length); 

在JavaScript中,使用對象來實現關聯數組。但是如果你想在已更改字段數組中添加產品名稱。你可以使用push方法如下圖所示,並檢查長度:

changedfields.push('productname'); 
console.log(changedfields.length); 

的Javascript數值索引數組長度
所以JavaScript的數值索引數組長度可以這樣計算:

console.log(array.length); 
console.log(changedfields.length); // in your case 

的Javascript關聯數組長度
Javascript關聯數組(對象)長度可以通過以下方式計算:
選項1:

Object.len = function(obj) { 
var objLen = 0; 
for (i in obj) { 
    obj.hasOwnProperty(i) ? objLen++ : ''; 
} 
return objLen; 
}; 
console.log(Object.len(changedfields)); 

選項2:

console.log(Object.keys(array).length); 
console.log(Object.keys(changedfields).length); // in your case 

注:這有問題與Internet Explorer 8,歌劇院等

+0

感謝兄弟:你的答案也正確= D –