2017-04-05 125 views
0
var obj = { 
    x1: { 
     x2: { 
      x3: { 
       condition: false, 
       condition_trust: 55.25, 
       condition_2 : true, 
       condition_2_trust: 56.456 
      } 
     }, 
     x4: { 
      name: "aaa", 
      name_trust: 55.25, 
      name_2: "bbb", 
      name_2_trust: 96.42 
     } 
    } 
} 

我有一棵这样的树,它更复杂,更深,更大。这些属性总是在最后一层。遍历树并推送数组中的所有属性

我想要做的是获得所有的属性与他们的价值观,并推动他们在一个新的数组。基本上我试图得到这样一个数组:

array = [ 
x1_x2_x3_condition : false, 
x1_x2_x3_condition_trust : 55.25, 
x1_x2_x3_condition_2 : true, 
x1_x2_x3_condition_2_trust : 55.456, 
x4_name : "aaa", 
x4_name_trust : 55.25, 
x4_name_2 : "bbb", 
x4_name_2_trust : 96.42 
] 

我不知道从哪里开始。有任何想法吗?

+2

不应该是吧'x1_x4'? –

+1

你想要的输出是无效的JavaScript。 – trincot

+1

@trincot,愚蠢的目标是丑陋的,并没有帮助。 –

回答

1

基本上你需要扁平物体?如果是这样,这里是解决方案

var obj = { 
 
    x1: { 
 
    x2: { 
 
     x3: { 
 
     condition: false, 
 
     condition_trust: 55.25, 
 
     condition_2: true, 
 
     condition_2_trust: 56.456 
 
     } 
 
    }, 
 
    x4: { 
 
     name: "aaa", 
 
     name_trust: 55.25, 
 
     name_2: "bbb", 
 
     name_2_trust: 96.42 
 
    } 
 
    } 
 
} 
 

 
function flattenObject(obj) { 
 
    return Object.keys(obj).reduce(function(a, k) { 
 
    if (obj[k].constructor === Object) { 
 
     var o = flattenObject(obj[k]); 
 
     Object.keys(o).forEach(function(key) { 
 
     a[k + '_' + key] = o[key]; 
 
     }); 
 
    } else { 
 
     a[k] = obj[k]; 
 
    } 
 
    return a; 
 
    }, {}); 
 
} 
 

 
console.log(flattenObject(obj));

+0

是的,这是我想要的。谢谢你,先生! – Alexandru