2017-08-28 3 views
1

月の値に基づいて別のデータセットを作成しようとしています。たとえば。 6月の1つのデータセットと7月の別のデータセット。しかし、私のコードでは、すべての月の値が結合され、1つのデータセットとして作成されています。異なるデータセットの配列を作成する

異なるデータセットを動的に作成するのに役立つ人は、本当に役に立ちます。私は、データオブジェクトあなたが二回オブジェクトに同じプロパティ名を使用することはできません

JSFIDDLE

var obj = [{ 
    date: "2017-06-01", 
    reqC: "129963", 
    month: "JUNE", 
    resC: "80522" 
    }, { 
    date: "2017-06-05", 
    reqC: "261162", 
    month: "JUNE", 
    resC: "83743" 
    },{ 
    date: "2017-07-03", 
    reqC: "438860", 
    month: "JULY", 
    resC: "166107" 
    }] 
    var maindataset = []; 
    var dataset = []; 
["reqC", "resC"].forEach((series) => { 
    dataset.push({ 
     seriesname: series, 
     data: obj.map((el) => { 
     return el[series] 
     }) 
    }) 

    }); 
    maindataset.push({ 
    dataset: dataset 
    }); 
    alert(JSON.stringify(maindataset)); 

// Expected Output 

{ 
    "dataset": [ 
    { 
     "dataset": [     //June 
     { 
      "seriesname": "Req", 
      "data": [ 
      { 
       "value": "129963" 
      }, 
      { 
       "value": "261162" 
      } 
      ] 
     }, 
     { 
      "seriesname": "Res", 
      "data": [ 
      { 
       "value": "80522" 
      }, 
      { 
       "value": "83743" 
      } 
      ] 
     } 
     ] 
    }, 
    { 
     "dataset": [     //July 
     { 
      "seriesname": "Req", 
      "data": [ 
      { 
       "value": "438860" 
      } 
      ] 
     }, 
     { 
      "seriesname": "Res", 
      "data": [ 
      { 
       "value": "166107" 
      } 
      ] 
     } 
     ] 
    } 
    ] 
} 

答えて

1

あなたは、ネストされたハッシュテーブルを使用して欲しかった部品のために、後でキーを反復処理することができます。

var data = [{ date: "2017-06-01", reqC: "129963", month: "JUNE", resC: "80522" }, { date: "2017-06-05", reqC: "261162", month: "JUNE", resC: "83743" }, { date: "2017-07-03", reqC: "438860", month: "JULY", resC: "166107" }], 
 
    result = { dataset: [] }, 
 
    parts = { reqC: 'Req', resC: 'Res' }, 
 
    hash = { _: result.dataset }; 
 

 
data.forEach(function (a) { 
 
    var temp = hash; 
 
    if (!temp[a.month]) { 
 
     temp[a.month] = { _: [] }; 
 
     temp._.push({ dataset: temp[a.month]._ }); 
 
    } 
 
    temp = temp[a.month]; 
 
    Object.keys(parts).forEach(function (k) { 
 
     if (!temp[k]) { 
 
      temp[k] = { _: [] }; 
 
      temp._.push({ seriesname: parts[k], data: temp[k]._ }); 
 
     } 
 
     temp[k]._.push({ value: a[k] }); 
 
    }); 
 
}); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

で試してみましたフィドルを添付しています。あなたはこのようになりますあなたのデータ内のオブジェクトがあります。

"data": [ 
     { 
     "value": "80522" 
     }, 
     { 
     "value": "83743" 
     } 
    ] 

をいずれかのユニークなものにキーを変更します。

"data": [ 
     { 
     "value1": "80522" 
     }, 
     { 
     "value2": "83743" 
     } 
    ] 

それとも配列ます

"data": [ "80522", "83743" ] 
+0

、ここでの問題があってはなりません – JohnnyAW

0

あなたがする必要があります月のチェックも追加してください。 これを試してみてください:

var obj = [{ 
    date: "2017-06-01", 
    reqC: "129963", 
    month: "JUNE", 
    resC: "80522" 
    }, { 
    date: "2017-06-05", 
    reqC: "261162", 
    month: "JUNE", 
    resC: "83743" 
    },{ 
    date: "2017-07-03", 
    reqC: "438860", 
    month: "JULY", 
    resC: "166107" 
    }] 
    var maindataset = []; 

    ["JUNE","JULY"].forEach((month)=>{ 
    var dataset = []; 
    ["reqC", "resC"].forEach((series) => { 
     dataset.push({ 
     seriesname: series, 
     data: obj.reduce((filtered, el) => { 
      if(el["month"] === month){ 
      filtered.push({value: el[series]}); 
      } 
      return filtered; 
     },[]) 
     }) 

    }); 
    maindataset.push({ 
     dataset: dataset 
    }); 
    }) 

    alert(JSON.stringify(maindataset)); 

出力:

[{ 
    "dataset": [{ 
     "seriesname": "reqC", 
     "data": [{ 
      "value": "129963" 
     }, { 
      "value": "261162" 
     }] 
    }, { 
     "seriesname": "resC", 
     "data": [{ 
      "value": "80522" 
     }, { 
      "value": "83743" 
     }] 
    }] 
}, { 
    "dataset": [{ 
     "seriesname": "reqC", 
     "data": [{ 
      "value": "438860" 
     }] 
    }, { 
     "seriesname": "resC", 
     "data": [{ 
      "value": "166107" 
     }] 
    }] 
}] 
1

あなたは月に基づいてグループを作成することができ、その後、あなたは出力が所望のデータ構造をすることができます。スニペットを確認してください。 2つの異なるオブジェクトのプロパティのthats

var obj = [{ 
 
    date: "2017-06-01", 
 
    reqC: "129963", 
 
    month: "JUNE", 
 
    resC: "80522" 
 
    }, { 
 
    date: "2017-06-05", 
 
    reqC: "261162", 
 
    month: "JUNE", 
 
    resC: "83743" 
 
    },{ 
 
    date: "2017-07-03", 
 
    reqC: "438860", 
 
    month: "JULY", 
 
    resC: "166107" 
 
    }]; 
 

 
var result = {}; 
 

 
var groups = obj.reduce(function(acc, obj) { 
 
    acc[obj.month] = acc[obj.month] || []; 
 
    acc[obj.month].push(obj); 
 
    return acc; 
 
}, {}); 
 

 
//console.log(groups); 
 

 
result.dataset = Object.keys(groups).map(function(key) { 
 
    return { 
 
    dataset: [{ 
 
     "seriesname" : "Req", 
 
     "data": groups[key].map(function(o) { 
 
     return { value : o.reqC }; 
 
     }) 
 
    }, { 
 
     "seriesname" : "Res", 
 
     "data": groups[key].map(function(o) { 
 
     return { value : o.resC }; 
 
     }) 
 
    }] 
 
    }; 
 
}); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題