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

関連する問題