var x = {
"completed": "",
"globalExposures": "10",
"tagExposures": [
{"8": 11},{"5": 12},{"10":23}
]
};
我想使用JSON访问“tagExposures”的键,即8,5和10。如果存在特定密钥,我想执行操作。我尝试下面的代码,但它没有给出所需的o / p。请,建议。
var exp = {
"completed": "",
"globalExposures": "10",
"tagExposures": [
{"8": 11},{"5": 12} ,{"10":23}
]
};
var arr=exp["tagExposures"];
var kys=[];
for(k in arr){
if(arr.hasOwnProperty(k)) kys.push(k);
}
console.log(kys); //=> This gives ['0','1']
答案 0 :(得分:2)
这是因为tagExposures
是一个键为0和1的数组
"tagExposures": [
{"8": 11},// 0
{"5": 12} // 1
]
如果您尝试使用tagExposures
的相同代码,请执行以下操作:
"tagExposures": {
"8": 11,
"5": 12
}
它会按你的意愿工作。
小提琴:http://jsfiddle.net/maniator/H5z6N/
输出:["5", "8"]
答案 1 :(得分:1)
for(k in arr){
if(arr.hasOwnProperty(k)) kys.push(k);
}
对于数组是错误的。只需将一个普通循环与Object.keys
结合使用,它返回每个对象的键(每次都是一个键):
for(var i = 0; i < arr.length; i++){
kys = kys.concat(Object.keys(arr[i]));
}
答案 2 :(得分:1)
我认为你错误地定义了tagExposures
关联数组。这给出了“8,5”例如:
var exp = {
"completed": "",
"globalExposures": "10",
"tagExposures": {
"8": 11,"5": 12
}
};
var arr=exp["tagExposures"];
var kys=[];
for(k in arr){
if(arr.hasOwnProperty(k)) kys.push(k);
}
console.log(kys);
答案 3 :(得分:0)
您的for(k in arr)
循环正在为您提供来自tagExposures
的密钥,这是一个数组。你需要另一个for循环来从对象中获取密钥。
for(k in arr){
if(arr.hasOwnProperty(k)){
var obj = arr[k];
for(v in obj){
if(obj.hasOwnProperty(v)){
kys.push(v);
}
}
}
}
console.log(kys); // ["8", "5", "10"]