2017-04-05 68 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