从任何类型的对象获取叶子值

时间:2017-10-05 01:15:27

标签: javascript arrays object

我试图将任何类型对象的所有叶值都作为数组 这是示例对象,我想从这个对象获得[1,2,3]。

     {
    “group1”:[
        {
            “value1”:”1”,
            "value2”:”2”
        },
        {
           “gropu2”:[{
            "gropu3”:”3”
              }]
        }]
 }

这是当前的实施。

 var t = {
    "a":[
        {
            "a":"1",
            "b":"2"
        },
        {
           "d":[{
            "e":"3"
           }]
        }]
 }
 function getNode( node ){
    if(node == null)
        return null;
    if(typeof node !== 'object'){
        return [node];
    }
    var arr = [];
    for( var i = 0; i < node.length ; i ++){
        Array.prototype.push.apply(arr, getNode(node[i]));
    }
    return arr;
 }
 $(document).ready(function(){
    console.log(getNode(t));
 });

但它什么都没有显示 我无法理解我的实施错误在哪里,还有其他简单的方法来完成这项工作吗?

1 个答案:

答案 0 :(得分:0)

问题在于这一行。

for( var i = 0; i < node.length ; i ++){

此处,您无法使用object循环访问for的所有元素 您必须将object转换为array,然后执行此操作。

var array_node = Object.keys(node).map(function(key) { return node[key] });
for( var i = 0; i < array_node.length ; i ++){
    Array.prototype.push.apply(arr, getNode(array_node[i]));
}

FIDDLE