2017-03-20 11 views
0

私は以下のようなデータセットを持っています(2番目のコード)。すべてのデータを1つの大きなオブジェクトにマージしたいのですが、下の例を参照してください。私はforEachでそれをやろうとしましたが、正しい結果が得られません。私が達成したい何入れ子配列のデータを1つの配列にマージする

var arr2 = [{ 
     "date": "20170314", 
     "steps": 620, 
     "nutrition.calories": 1634, 
     "nutrition.fat.total": 57.22602462768555, 
     "nutrition.protein": 188.070068359375, 
     "nutrition.carbs.total": 83.85400390625 
     }, { 
     "date": "20170314", 
     "steps": 620, 
     "nutrition.calories": 1634, 
     "nutrition.fat.total": 57.22602462768555, 
     "nutrition.protein": 188.070068359375, 
     "nutrition.carbs.total": 83.85400390625 
     }] 

これは私の現在の配列がどのように見えるかです:誰かがそれで私を助けてくださいすることができ

var array = [ 
    { 
    "type": "steps", 
    "data": [ 
     { 
     "startDate": "2017-03-12T23:00:00.000Z", 
     "endDate": "2017-03-13T23:00:00.000Z", 
     "value": 1031, 
     "unit": "count" 
     }, { 
     "startDate": "2017-03-13T23:00:00.000Z", 
     "endDate": "2017-03-14T23:00:00.000Z", 
     "value": 620, 
     "unit": "count" 
     } 
    ] 
    }, { 
    "type": "nutrition.calories", 
    "data": [ 
     { 
     "startDate": "2017-03-12T23:00:00.000Z", 
     "endDate": "2017-03-13T23:00:00.000Z", 
     "value": 0, 
     "unit": "kcal" 
     }, { 
     "startDate": "2017-03-13T23:00:00.000Z", 
     "endDate": "2017-03-14T23:00:00.000Z", 
     "value": 1634.100463867188, 
     "unit": "kcal" 
     } 
    ] 
    }, { 
    "type": "nutrition.fat.total", 
    "data": [ 
     { 
     "startDate": "2017-03-12T23:00:00.000Z", 
     "endDate": "2017-03-13T23:00:00.000Z", 
     "value": 0, 
     "unit": "g" 
     }, { 
     "startDate": "2017-03-13T23:00:00.000Z", 
     "endDate": "2017-03-14T23:00:00.000Z", 
     "value": 57.22602462768555, 
     "unit": "g" 
     } 
    ] 
    }, { 
    "type": "nutrition.protein", 
    "data": [ 
     { 
     "startDate": "2017-03-12T23:00:00.000Z", 
     "endDate": "2017-03-13T23:00:00.000Z", 
     "value": 0, 
     "unit": "g" 
     }, { 
     "startDate": "2017-03-13T23:00:00.000Z", 
     "endDate": "2017-03-14T23:00:00.000Z", 
     "value": 188.070068359375, 
     "unit": "g" 
     } 
    ] 
    }, { 
    "type": "nutrition.carbs.total", 
    "data": [ 
     { 
     "startDate": "2017-03-12T23:00:00.000Z", 
     "endDate": "2017-03-13T23:00:00.000Z", 
     "value": 0, 
     "unit": "g" 
     }, { 
     "startDate": "2017-03-13T23:00:00.000Z", 
     "endDate": "2017-03-14T23:00:00.000Z", 
     "value": 83.85400390625, 
     "unit": "g" 
     } 
    ] 
    } 
] 

。 Foreachループが機能していません。

答えて

2

私は、出力配列は、あなたが最初にこれより提供さ答えは可能性がないためにそれが正しいかどうか、元の配列の最初のデータ・オブジェクトが、ステップを除くすべてのプロパティのための0の値を持っていることに気づきましたソリューション:

var originalArray = [ 
    { 
    "type": "steps", 
    "data": [ 
     { 
     "startDate": "2017-03-12T23:00:00.000Z", 
     "endDate": "2017-03-13T23:00:00.000Z", 
     "value": 1031, 
     "unit": "count" 
     }, { 
     "startDate": "2017-03-13T23:00:00.000Z", 
     "endDate": "2017-03-14T23:00:00.000Z", 
     "value": 620, 
     "unit": "count" 
     } 
    ] 
    }, { 
    "type": "nutrition.calories", 
    "data": [ 
     { 
     "startDate": "2017-03-12T23:00:00.000Z", 
     "endDate": "2017-03-13T23:00:00.000Z", 
     "value": 0, 
     "unit": "kcal" 
     }, { 
     "startDate": "2017-03-13T23:00:00.000Z", 
     "endDate": "2017-03-14T23:00:00.000Z", 
     "value": 1634.100463867188, 
     "unit": "kcal" 
     } 
    ] 
    }, { 
    "type": "nutrition.fat.total", 
    "data": [ 
     { 
     "startDate": "2017-03-12T23:00:00.000Z", 
     "endDate": "2017-03-13T23:00:00.000Z", 
     "value": 0, 
     "unit": "g" 
     }, { 
     "startDate": "2017-03-13T23:00:00.000Z", 
     "endDate": "2017-03-14T23:00:00.000Z", 
     "value": 57.22602462768555, 
     "unit": "g" 
     } 
    ] 
    }, { 
    "type": "nutrition.protein", 
    "data": [ 
     { 
     "startDate": "2017-03-12T23:00:00.000Z", 
     "endDate": "2017-03-13T23:00:00.000Z", 
     "value": 0, 
     "unit": "g" 
     }, { 
     "startDate": "2017-03-13T23:00:00.000Z", 
     "endDate": "2017-03-14T23:00:00.000Z", 
     "value": 188.070068359375, 
     "unit": "g" 
     } 
    ] 
    }, { 
    "type": "nutrition.carbs.total", 
    "data": [ 
     { 
     "startDate": "2017-03-12T23:00:00.000Z", 
     "endDate": "2017-03-13T23:00:00.000Z", 
     "value": 0, 
     "unit": "g" 
     }, { 
     "startDate": "2017-03-13T23:00:00.000Z", 
     "endDate": "2017-03-14T23:00:00.000Z", 
     "value": 83.85400390625, 
     "unit": "g" 
     } 
    ] 
    } 
] 

var res = originalArray.reduce(function(result, obj){ 
    obj.data.forEach(function(dataObj, index){ 
    if(!result[index]){ 
     result[index] = { 
     date: dataObj.startDate.split('T')[0].split('-').join('') 
     } 
    } 
    result[index][obj.type] = dataObj.value; 
    }) 

    return result; 
},[]) 

console.log(res) 
+0

おかげ@Ilija、私は正しいを適用することができませんでしたモバイルウェブサイトからフォーマットします。 –

+0

私はこの解決策が働いていることを確認できます。ありがとう!!! – kabus

+1

@kabus:解決策があなたのために働くなら、受け入れてUpvote。コメントありがとうございます。 –

0

あなたはいくつかの制約がありません。

たとえば、データがstartDateまたはendDateにあるとしますか?

endDateに帰属を前提に続いて、私は、これはあなたを助けるかもしれないと思う:

になり
var models = {}; 
array.forEach(function(a) { 
    a.data.forEach(function(e, idx) { 
     if (!(e.endDate in models)) { 
      models[e.endDate] = {}; 
     } 
     if (!(a.type in models[e.endDate])) { 
      models[e.endDate][a.type] = 0; 
     } 
     models[e.endDate][a.type] = e.value; 
    }); 
}); 
models = Object.keys(models).map(function(k){ models[k].date = k.slice(0,10).replace(/-/g, ''); return models[k]; }); 
console.log(models); 

enter image description here

関連する問題