如何从对象获取数组的数量

时间:2013-07-25 12:50:49

标签: javascript arrays json object

我有以下格式的JSON网络服务。

 { Name:['a','b'], Name:['cd','ef'], Age:{...}, Address:{...} }. 

这里我有 2个阵列&对象内的2个对象,这些(数组和对象)数字可能会有所不同。我需要的是,如何从主对象中单独获取数组的数量?可能存在另一种解决我的问题的方法,但我需要我的代码在.JS(javascript文件)中。


当我尝试时:

Object.keys(mainobject).length; 

它给出了主对象中数组+对象的总数。

3 个答案:

答案 0 :(得分:4)

var data = { Name:['a','b'], OtherName:['cd','ef'], Age:{a: 12}, Address:{a: 'asdf'} }

var numberOfArrays = Object.keys(data).filter(function(key) {
    return data[key] instanceof Array; //or Array.isArray(data[key]) if the array was created in another frame
}).length;

alert(numberOfArrays);

注意:这在旧版本的IE

中无效

jsFiddle

要使其适用于不支持它的浏览器,请使用MDN中的填充程序:

Object.keys

Array.filter

答案 1 :(得分:1)

我会写一些东西来计算所有类型

var obj = {
    k1: ['a','b'], k2: ['cd','ef'],
    k3: 0, k4: 1,
    k5: {a:'b'},
    k6: new Date(),
    k7: "foo"
};

function getType(obj) {
    var type = Object.prototype.toString.call(obj).slice(8, -1);
    if (type === 'Object') return obj.constructor.name;
    return type;
}

function countTypes(obj) {
    var k, hop = Object.prototype.hasOwnProperty,
        ret = {}, type;
    for (k in obj) if (hop.call(obj, k)) {
        type = getType(obj[k]);
        if (!ret[type]) ret[type] = 1;
        else ++ret[type];
    }
    return ret;
}

var theTypes = countTypes(obj);
// Object {Array: 2, Number: 2, Object: 1, Date: 1, String: 1}

现在,如果我想知道 Arrays 的数量

var numArrays = theTypes.Array || 0; // 2 Arrays in this example

答案 2 :(得分:0)

您可以尝试检查对象的每个成员的类型。

var count = 0;
for (var foo in mainobject) {
    if (foo instanceof Array) count++;
}

现在你所要做的就是阅读count的价值。