我有以下格式的JSON网络服务。
{ Name:['a','b'], Name:['cd','ef'], Age:{...}, Address:{...} }.
这里我有 2个阵列&对象内的2个对象,这些(数组和对象)数字可能会有所不同。我需要的是,如何从主对象中单独获取数组的数量?可能存在另一种解决我的问题的方法,但我需要我的代码在.JS(javascript文件)中。
当我尝试时:
Object.keys(mainobject).length;
它给出了主对象中数组+对象的总数。
答案 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
中无效要使其适用于不支持它的浏览器,请使用MDN中的填充程序:
答案 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
的价值。