2014-06-18 64 views
0

我正在使用AngularJS中的一些以前的代碼,但我的問題涉及傳遞給視圖的對象的奇怪事件。我得到一個數組數組。但是,嵌套數組具有鍵值對。這在我的理解中沒有意義。JavaScript對象如何包含屬性(鍵值對)的數組(帶方括號)?

此外,我相信這是導致與我正在嘗試的自定義過濾器的問題。通用模型過濾器可以工作,但是在特定字段上過濾不會。我已經在jsfiddle中測試了這個概念,如果數據被格式化爲具有屬性的對象數組,但它試圖複製當前數據輸出錯誤的結構,因爲它不是有效的JavaScript,所以它工作正常。有人可以闡明我的困境嗎?

[Array[0], Array[0], Array[0]...] 
0: Array[0] 
    $$hashKey: "00U" 
    firstGroupList: Object 
    length: 0 
    subTitle: "Capsules" 
    title: "Esomeprazole Strontium" 
    __proto__: Array[0] 
1: Array[0] 
    $$hashKey: "01X" 
    firstGroupList: Object 
    length: 0 
    subTitle: "Tablets" 
    title: "Salsalate" 
    __proto__: Array[0] 
2: Array[0] 
3: Array[0] 
4: Array[0] 
... 

[title: "title", subTitle: "subTitle"]這樣的數組如何存在?

+2

數組是對象。您可以像普通對象或函數或任何其他對象一樣向它們添加屬性。 '的console.log(列表[0] .subTitle); //「Capsules」'這不是數組的典型用法,但可以方便地保存其他數據。 –

+0

由於@cookiemonster說數組是對象,所以在你的情況下,它們是具有對象屬性的空數組。 – MarcoL

+0

關於你的其他代碼,如果有問題,你需要發佈一個包含一個最小例子的問題。但這不是無效的JavaScript。 –

回答

0

考慮以下幾點:

var arr = [1,2,3,4]; 
var obj = {key: 50, anotherKey: 70}; 

arr.prop = 'something-something'; 
obj.prop = 'something-something'; 

console.log(arr['prop']); 
console.log(obj['prop']); 

它將輸出「的東西,什麼」兩次,並在內部非常類似的事情發生 - 要設置一個對象的屬性,然後閱讀它。

但是,區別在於對象的實際類型 - arr是Array類型,而obj是Object類型。請注意,這是而不是我們談論的變量類型 - arr和obj都是「對象」類型(您可以使用typeof輕鬆檢查)。對象的類型實際上是指對象的原型,即該特定變量所基於的對象(對於那些更熟悉OOP的對象,這將類似於您繼承的類,除非在這種情況下它只是一個被繼承的實例從一個班級,而不是一個全新的班級)。

下面是一篇文章,可以幫助您瞭解原型更好:http://sporto.github.io/blog/2013/02/22/a-plain-english-guide-to-javascript-prototypes/

再回到原來的代碼,當你真正注意到改編和OBJ之間的區別?好了,尤其是想到的一件事是JSON:

var strArr = JSON.stringify(arr); // [1,2,3,4] 
var strObj = JSON.stringify(obj); // {"key":50,"anotherKey":70,"prop":"something-something"} 

所以JSON將「失去」的情況下,道具屬性,你使用它的陣列上 - 這就是爲什麼你要小心,當一個例子設置數組的屬性。

最後,如果你想考慮「prop」屬性以及「普通」數組成員,你將如何迭代這個數組?爲此,您可以使用for..in:

for (key in arr) console.log(arr[key]); 
/* displays: 
1 
2 
3 
4 
something-something 
*/ 
相關問題