2012-11-24 52 views
1

可能重複:
Array length undefined數組長度不工作

我有以下的數組,但每當我試圖找出長度categoryData.length它給我的只有undefined。如果我輸入console.log(categoryData)它會給我陣列中的所有對象。

var categoryData = { 
animals: { 
    name: "Animals", 
    description: "All your favorites from aardvarks to zebras.", 
    items: [ 
     { 
      name: "Pets" 
     }, 
     { 
      name: "Farm Animals" 
     }, 
     { 
      name: "Wild Animals" 
     } 
    ] 
}, 
colors: { 
    name: "Colors", 
    description: "Fresh colors from the magic rainbow.", 
    items: [ 
     { 
      name: "Blue" 
     }, 
     { 
      name: "Green" 
     }, 
     { 
      name: "Orange" 
     }, 
     { 
      name: "Purple" 
     }, 
     { 
      name: "Red" 
     }, 
     { 
      name: "Yellow" 
     }, 
     { 
      name: "Violet" 
     } 
    ] 
}, 
vehicles: { 
    name: "Vehicles", 
    description: "Everything from cars to planes.", 
    items: [ 
     { 
      name: "Cars" 
     }, 
     { 
      name: "Planes" 
     }, 
     { 
      name: "Construction" 
     } 
    ] 
} 

};

+0

@ user1689607:該問題已關閉。 –

回答

7

這是因爲categoryData不是一個數組 - 它是一個對象。雖然一些JS對象(例如arguments)支持length屬性,但使用對象字面符號創建的對象不會。

你可以自己算你對象的長度,與此:

function countProps(obj) { 
    var count = 0; 
    for (var p in obj) { 
     obj.hasOwnProperty(p) && count++; 
    } 
    return count; 
} 

這甚至可以通過更簡單的方式來完成,如果你的目標環境支持(或有它勻)的Object.keys方法:

function sizeObj(obj) { 
    return Object.keys(obj).length; 
} 

......而這正是它是如何在做Underscore.js library method

_.size = function(obj) { 
    if (obj == null) return 0; 
    return (obj.length === +obj.length) ? obj.length : _.keys(obj).length; 
}; 
+0

非常感謝! –

+0

謝謝。除了這個http://stackoverflow.com/a/17818507/2480481你可以使用它沒有問題。我直接使用'Object.keys(document.getElementsByTagName(「audio」))。length;',並且工作完美。 U可以看看我的js音頻控制器的要點https://gist.github.com/erm3nda/f105cc80a478c641ca527f13866c5f4d – erm3nda

+0

在node.js中工作謝謝你@ raina77ow –