使用Javascript检查多维数组的长度

Check Length of Multidimensional Arrays with Javascript

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Length of Javascript Associative Array

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

1
2
3
4
5
6
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()语句创建了数组。为什么虚拟数组工作得很好?


这些不是数组。它们是物体,或者至少被当作物体对待。换句话说,即使它们是数组实例,"长度"也只跟踪最大的数字索引属性。

javascript实际上没有"关联数组"类型。

您可以使用如下方法计算对象实例中的属性数:

1
2
3
4
5
6
7
function numProps(obj) {
  var c = 0;
  for (var key in obj) {
    if (obj.hasOwnProperty(key)) ++c;
  }
  return c;
}

当您拥有继承链等时,事情会变得有些混乱,您必须根据自己的体系结构来确定您想要的语义。


.length只在阵列上工作。它不适用于关联数组/对象。

patientsData["XXXXX"]不是数组。它是一个物体。下面是一个简单的问题示例:

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


似乎您没有使用嵌套数组,而是使用对象中嵌套的对象,因为您是通过成员的名称(而不是索引)访问成员的。