【问题标题】:Check Length of Multidimensional Arrays with Javascript [duplicate]使用 Javascript 检查多维数组的长度 [重复]
【发布时间】:2011-11-03 20:16:51
【问题描述】:

可能重复:
Length of Javascript Associative Array

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

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() 语句创建了数组。为什么虚拟数组可以正常工作?

【问题讨论】:

  • 看看patientsData是什么样的会很有帮助。
  • 如果你真的想得到一个数组(而不是一个对象)的维度,那么请看这里:stackoverflow.com/a/13832026/975097

标签: javascript arrays multidimensional-array


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    JavaScript 并没有真正的“关联数组”类型。

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

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

    当你有继承链等时,事情会变得有些混乱,你必须根据你自己的架构来确定你希望它的语义是什么。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-02
        • 2011-02-18
        • 2023-02-25
        相关资源
        最近更新 更多