【问题标题】:Array length not working [duplicate]数组长度不起作用[重复]
【发布时间】:2012-11-24 14:05:48
【问题描述】:

可能重复:
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"
        }
    ]
}

};

【问题讨论】:

  • @user1689607:这个问题已经结束了。

标签: javascript multidimensional-array


【解决方案1】:

那是因为 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;
};

【讨论】:

猜你喜欢
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-03
相关资源
最近更新 更多