2017-11-14 11 views
1

変更できないAPIから受け取ったJavaScriptオブジェクトがあります。ツール内でこのデータを使用したいと思いますが、ツールはオブジェクトのルートレベルに格納されている値のみを受け入れます。私はレベルを下にキーの値にアクセスするためにドット表記法を使用することはできません。JavaScriptオブジェクトを部分的に平坦化する

以下の例では、shape.colourにアクセスできますが、代わりにshape__colourなどの新しいJSONオブジェクトを参照してください。オブジェクトを開始

例:私はそれが見えるように必要なもの

[{ 
    "id" : 12345, 
    "size" : 40, 
    "shape": { 
    "colour" : 'yellow', 
    "dimension" : '2D' 
    } 
}, 
{ 
    "id" : 12346, 
    "size" : 50, 
    "shape": { 
    "colour" : 'blue', 
    "dimension" : '3D' 
    } 
}] 

:私は全体来ているオブジェクトの平坦化機能の

[{ 
    "id" : 12345, 
    "size" : 40, 
    "shape__colour": 'yellow', 
    "shape__dimension" : '2D;' 
    } 
}, 
{ 
    "id" : 12346, 
    "size" : 50, 
    "shape__colour": 'blue', 
    "shape__dimension" : '3D' 
    } 
}] 

他の例としては、(単一レベルの配列を生成するように見えます私は個々のオブジェクトを保持する必要がありますが、内部のデータは1つのレベルにする必要があります。

ご協力いただければ幸いです!

let result = arr.map(({id, size, shape}) => { 
    return { 
    id, 
    size, 
    shape_colour: shape.colour, 
    shape_dimension: shape.dimension 
    } 
}); 

注:

+0

SOは無料のコード作成サービスではありません。これまでに何を試しましたか? –

答えて

3

map機能:あなたはまた、引数リストでシェイプオブジェクトをdestructureすることができます:

const result = arr.map( 
    ({shape, ...rest}) => ({ shape__colour: shape.colour, shape__dimension: shape.dimension, ...rest }) 
); 

形状が動的プロパティ:

const result = arr.map(
({shape, ...rest}) => Object.assign(rest, ...Object.keys(shape).map(key => {["shape__"+key] : shape[key]})) 
); 
+0

これは素晴らしいことです。私が必要とする最後のオブジェクトに近づけてくれるのは間違いありません。元のデータセットには、idやsizeなどの約50の他の「ルート」キーがあります。それらをループして明示的にリストすることなく新しいオブジェクトに追加する方法はありますか?ご協力いただき誠にありがとうございます! – techytuppers

+0

@techytruppersは私の答えを試してください;)それはすでにこれのように動作するはずです( '残りの部分はすべてです) –

+0

@techytuppers [試してみてください]](http://jsbin.com/yuzehetupo/edit ?コンソール) –

2

あなたは、扁平形状のプロパティを持つ新しい配列を返すようにmapを使用することができます

let result = arr.map(({ 
    id, 
    size, 
    shape: { colour: shape_colour, dimension: shape_dimension } 
}) => { 
    return { 
    id, 
    size, 
    shape_colour, 
    shape_dimension, 
    } 
}); 
+0

私は、機能に何が入っているのか、私が何を返すのかを明確に説明することを好む。 – Andy

+0

ありがとうございました! – techytuppers

関連する問題