检查长度的JavaScript

问题描述:

可能重复:
Length of Javascript Associative Array检查长度的JavaScript

我想检查多维数组的长度,但我得到“未定义”作为回报。我假设我的代码有问题,但我看不出有什么奇怪的地方。

alert(patientsData.length); //undefined 
alert(patientsData["XXXXX"].length); //undefined 
alert(patientsData["XXXXX"]['firstName']); //a name 

fruits = ["Banana", "Orange", "Apple", "Mango"]; 
alert(fruits.length); //4 

想法?这可能与范围有关吗?该数组被声明并设置在函数之外。这可能与JSON有关吗?我从eval()语句创建了该数组。为什么哑数组工作得很好?

+0

这将有助于查看'patientData'是什么样的。 –

+1

如果您实际上想获取数组的维数(而不是对象),请参阅此处:http://stackoverflow.com/a/13832026/975097 –

那些不是数组。它们是物体,或者至少它们被视为物体。即使它们是数组实例,换句话说,“长度”只跟踪最大的数字索引属性。

JavaScript实际上并没有“关联数组”类型。

你可以像这样算上一个对象实例的属性数:

function numProps(obj) { 
    var c = 0; 
    for (var key in obj) { 
    if (obj.hasOwnProperty(key)) ++c; 
    } 
    return c; 
} 

,事情就当你得到继承链等有点凌乱,而且你得把你想要的是什么基于你自己的架构的语义。

.length只适用于数组。它不适用于关联数组/对象。

patientsData["XXXXX"]不是数组。这是一个对象。下面是您的问题的一个简单示例:

var data = {firstName: 'a name'}; 
alert(data.length); //undefined 

看起来您并未使用嵌套数组,而是使用嵌套在对象中的对象,因为您是按名称(而不是索引)访问成员。