使用如下形式的对象数组:
[
{
1429={
{
8766={...},
8483={...},
7345={...}
}
}
},
{
9041={...}
}
]
我怎么能得到这样的阵列?: [1429,9041]
如果对象数组在另一个结构中,则此代码可以工作:
var obj = {
"5": "some",
"8": "thing"
};
var keys = $.map(obj, function (value, key) {
return key;
});
console.log(keys);
那会回归[5,8]。但在我的例子中,它只会返回索引[0,1]
即使我不知道对象的深度 - 是否可以获得该级别的值?我不需要索引,我需要这些值。到目前为止我找不到任何关于它的信息。对我来说可能有任何提示吗?
P.S。:我知道我可以使用这些键和循环来解决问题,但我只是想要一种更简单的方法来实现它。
此致
答案 0 :(得分:1)
你正在寻找json对象中的键,你可以这样得到它们:
Object.keys(obj);
对象示例:
var obj = {
"5": "some",
"8": "thing"
};
你会得到:
["5","8"]
表示此类型的对象数组:
var arrayObject = [{},{},{}];
您可以使用地图并获取密钥:
var keys = arrayObject.map(function(k){
return Object.keys(k);
});
keys是一组键数组。例如,对于以下对象(类似于您的数据结构):
var l= [
{
1429:{
8766: "test",
8483:"test",
7345: "test"
}
},
{
9041: "test"
}
];
你会得到:
[["1429"],["9041"]]
应用concat,你会得到你想要的东西。这里如何在多个数组的情况下应用concat。
var arrayOfKeys = [].concat.apply([], keys);
现在你会得到:
["1429","9041"];
答案 1 :(得分:1)
在您的具体情况下,您可以使用
var keys = [];
root.forEach(function(v) { keys = keys.concat(Object.keys(v)); });
如果你有一个数组树而你想要所有其他对象的键(而不是递归到对象中),那么一个简单的递归函数就可以了:
function topKeys(x) {
if (x && x.constructor === Array) {
var result = [];
x.forEach(function(item) {
result = result.concat(topKeys(item));
});
return result;
} else if (typeof x === "object") {
return Object.keys(x);
} else {
return [];
}
}