javascript:如何将最高层的json对象作为数组?

时间:2013-11-27 09:01:53

标签: javascript arrays json

使用如下形式的对象数组:

[
    { 
        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。:我知道我可以使用这些键和循环来解决问题,但我只是想要一种更简单的方法来实现它。

此致

2 个答案:

答案 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 [];
   }
}