4

ここで誰かが私を正しい方向に向けてくれることを願っています。Date、Set、および Value をプロパティとして持つオブジェクトの数を含む配列があります。
クライアント側でこれを、各メンバー配列が次のようなデータを保持する配列の配列に変換する必要があります: [日付、セット 0 の値、セット 1 の値]
任意の数の "セット」、これは私にとって複雑な部分です. 提案されたソリューションには、これを行うために使用する jQuery またはその他の JavaScript ライブラリ セットが必要になる場合があります。私はそれで問題はありません。それを成し遂げましょう。:)
以下の初期および終了データセットを参照してください。

最初のものは2セットだけです:

var data = [  
    { Date: "2/10/2013", Set: 0, Value: 1 },   
    { Date: "2/10/2013", Set: 1, Value: 0 },   
    { Date: "2/11/2013", Set: 0, Value: 15 },   
    { Date: "2/11/2013", Set: 1, Value: 8 },   
    { Date: "2/12/2013", Set: 0, Value: 12 },    
    { Date: "2/12/2013", Set: 1, Value: 11 },    
    { Date: "2/13/2013", Set: 0, Value: 15 },   
    { Date: "2/13/2013", Set: 1, Value: 19 },   
    { Date: "2/14/2013", Set: 0, Value: 10 },    
    { Date: "2/14/2013", Set: 1, Value: 20 }   
];

var endData = [
    [ "2/10/2013", 1, 0 ],  
    [ "2/11/2013", 15, 8 ],  
    [ "2/12/2013", 12, 11 ],  
    [ "2/13/2013", 15, 19 ],  
    [ "2/14/2013", 10, 20 ]  
];

そしてこちらが3セットの例。たとえば、データが次のような場合:

var data = [
    { Date: "2/10/2013", Set: 0, Value: 1 },   
    { Date: "2/10/2013", Set: 1, Value: 2 },  
    { Date: "2/10/2013", Set: 2, Value: 3 },   
    { Date: "2/11/2013", Set: 0, Value: 10 },  
    { Date: "2/11/2013", Set: 1, Value: 15 },   
    { Date: "2/11/2013", Set: 2, Value: 20 }  
];

返される配列は次のようにする必要があります。

var endData = [  
    [ "2/10/2013", 1, 2, 3 ],  
    [ "2/10/2013", 10, 15, 20 ]  
];

任意のポインタをいただければ幸いです。

4

3 に答える 3

4

ループとグローバルdat変数を使用して、リストのどこにいるかを追跡します。

var endData=[], dat='', row=[];
for (var i=0; i<data.length; i++) {
    var obj=data[i], val=obj.Value;
    if (dat!=obj.Date) {
        if (i) endData.push(row);
        dat = obj.Date;
        row = [dat, val];
    } else {
        row.push(val);
    }
}
endData.push(row); // last one

http://jsfiddle.net/mblase75/rJbq/

于 2013-02-15T21:58:57.167 に答える
1
;(function() {
    var data = [  
        { Date: "2/10/2013", Set: 0, Value: 1 },   
        { Date: "2/10/2013", Set: 1, Value: 0 },   
        { Date: "2/11/2013", Set: 0, Value: 15 },   
        { Date: "2/11/2013", Set: 1, Value: 8 },   
        { Date: "2/12/2013", Set: 0, Value: 12 },    
        { Date: "2/12/2013", Set: 1, Value: 11 },    
        { Date: "2/13/2013", Set: 0, Value: 15 },   
        { Date: "2/13/2013", Set: 1, Value: 19 },   
        { Date: "2/14/2013", Set: 0, Value: 10 },    
        { Date: "2/14/2013", Set: 1, Value: 20 }   
    ];

    var endData = {};

    for (var i = 0; i < data.length; ++i) {
        var date = data[i].Date;

        if (endData[date] === undefined)
            endData[date] = [];

        endData[date].push(data[i].Value);
    }

    var finalData = [];

    for (var ed in endData) {
        var a = [ed];

        for (var i = 0; i < endData[ed].length; ++i) {
            a.push(endData[ed][i]);
        }

        finalData.push(a);
    }

    console.log(finalData);
})();

出力は次のようになります。

var finalData = [
    ["2/10/2013", 1, 0],
    ["2/11/2013", 15, 8],
    ["2/12/2013", 12, 11],
    ["2/13/2013", 15, 19],
    ["2/14/2013", 10, 20]
];
于 2013-02-15T21:57:46.433 に答える
1
var endData = [];
var indexes = {};

for(var i = 0, len = data.length; i < len; i++) {
    if(indexes[data[i].Date] === undefined) {
        indexes[data[i].Date] = endData.length;
        endData.push([data[i].Date]);
    }
    endData[indexes[data[i].Date]][data[i].Set + 1] = data[i].Value;
}
于 2013-02-15T22:08:16.520 に答える