2016-05-31 11 views
0

例オブジェクト配列がサーバーによって送信される -Javascriptの配列操作 - 複雑なJSONレスポンス

var x = [{a:1,b:2,c:3,d:[{f:6,g:7}],e:[{h:8}]}, 
    {a:1,b:2,c:3,d:[{f:6,g:7}],e:[{h:8}]}, 
    {a:1,b:2,c:3,d:[{f:6,g:7}],e:[{h:8}]}]; 

それは次のようになりますので、私はそれを変更しない方法 - 私はこれを試してみた

var y = [{a:1,b:2,c:3,h:8},{f:6,g:7,h:8}, 
    {a:1,b:2,c:3,h:8},{f:6,g:7,h:8}, 
    {a:1,b:2,c:3,h:8},{f:6,g:7,h:8}]; 

ちょうど今醜いコード -

function arrange(arr){ 
var temp1 = []; 
var temp2 = []; 
var output = []; 

    for(var i = 0;i < arr.length;i++){ 
    temp1 = arr[i].d; 
    temp2 = arr[i].e; 
    temp1.push(temp2[0].h); 

    output.push(arr[i].a,arr[i].b,arr[i].c,temp2[0].h); 
    output.push(temp1); 

    return output; 
    } 
} 

出力が間違っていると私だけの値を与え、私は、キー/値のペアを必要とします。

ビューに正しい応答を送信したいとします。私は現時点では別の仕事に取り組んでおり、プログラミングを勉強することは私が横にしていることです。今、私は立ち往生しています。恐ろしいコードを許してください:)。

+0

ネスティングは1レベルしか深くないのですか、それとも恣意的にできますか? –

+0

@EvanTrimboliこんにちはエヴァン、私がヒットしたい最初のビューのために、入れ子はわずか1レベルです。もう1つは、任意で、おそらく2〜3レベルです。 – Airynd

+0

また、元のブロックにh:8が含まれているのはなぜですか? –

答えて

1

Javascriptが明示的に破壊さの表現のために用意されています。非常に簡潔な方法は、あなたが希望するオブジェクトにデータを抽出します。

let result = x.reduce((elts, {a, b, c, d: [{f, g}], e: [{h}]}) => { 
    return elts.concat({a, b, c, h}, {f, g, h}) 
}, []) 

あなたconsole.log変数result場合、あなたはそれがyにご希望の値を示します見つけることができます:

[{"a":1,"b":2,"c":3,"h":8},{"f":6,"g":7,"h":8},{"a":1,"b":2,"c":3,"h":8},{"f":6,"g":7,"h":8},{"a":1,"b":2,"c":3,"h":8},{"f":6,"g":7,"h":8}] 
+0

私はMDNのJS文書を読むべきです。どうもありがとう!そして、私はオブジェクトの代わりに配列を作成している間違いを犯しました:) – Airynd

0

あなたは配列を作成しています。オブジェクトを作成したい。

output = []; 
for(var i = 0;i < arr.length;i++){ 
    var obj = { 
     a: arr[i].a, 
     b: arr[i].b, 
     c: arr[i].c, 
     h: arr[i].e.h 
    } 

    var obj2 = { 
     f: arr[i].d.f, 
     g: arr[i].d.g, 
     h: arr[i].e.h 
    } 


    output.push(obj); 
    output.push(obj2); 
} 
return output; 
0

これを試してみてください。あなたの試みへの変更はコメントしています

var x = [{a:1,b:2,c:3,d:[{f:6,g:7}],e:[{h:8}]}, 
    {a:1,b:2,c:3,d:[{f:6,g:7}],e:[{h:8}]}, 
    {a:1,b:2,c:3,d:[{f:6,g:7}],e:[{h:8}]}]; 

function arrange(arr){ 
    var temp1, temp2, output = []; 

    for(var i = 0;i < arr.length;i++){ 
    temp1 = arr[i].d[0]; // grab first array element 
    delete arr[i].d;  // delete d from object 
    temp2 = arr[i].e[0]; // grab first array element 
    delete arr[i].e;  // delete e from object 

    output.push($.extend(arr[i], temp2)); // merge object and e, push 
    output.push($.extend(temp1, temp2)); // merge d and e, push 
    } 
    return output; // move from in for loop to here 
} 

出力:

[ 
    {a:1,b:2,c:3,h:8}, {f:6,g:7,h:8}, 
    {a:1,b:2,c:3,h:8}, {f:6,g:7,h:8}, 
    {a:1,b:2,c:3,h:8}, {f:6,g:7,h:8} 
] 

JSBin example.

あなたはjQueryのタグ付け、それをextend機能を使用しました。プレーンJS、またはより小さいライブラリは、jQueryを使用しない人なら誰でも利用できます。