4

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

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

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


当我尝试时:

Object.keys(mainobject).length; 

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

4

3 回答 3

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 的 shim:

对象键

Array.filter

于 2013-07-25T13:01:46.443 回答
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}

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

var numArrays = theTypes.Array || 0; // 2 Arrays in this example
于 2013-07-25T13:11:58.437 回答
0

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

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

现在您所要做的就是读取count.

于 2013-07-25T12:56:14.983 回答