dataArray4 =
["2015/11/25 16:40:58","2015/11/25","鈴木","UNIT1","80"],
["2015/11/25 16:40:59","2015/11/25","鈴木","UNIT1","40"],
["2015/11/25 16:40:60","2015/11/25","鈴木","UNIT2","50"],
["2015/11/25 16:40:61","2015/11/25","鈴木","UNIT2","60"],
["2015/11/25 16:40:61","2015/11/25","鈴木","UNIT2","90"],
このような配列データをうまく並べ替え、配列の3番めにある「UNIT」ごとに行を作成、
4番目の点数を列のデータにして、テーブルを作成したいと考えております。
(添付JPG参照)
JSfiddleにサンプルを入れました。
https://jsfiddle.net/kajironpu/67njxhjv/
既存の配列で、1つ目と2つ目の3番目の「タイトル」がもし同じだったら、別の配列にpushしています。
このようなやり方で、全部別の配列に入れなおして、それをテーブル表示する方法を考えました。
並べ替え後は
["UNIT1","80","40"],["UNIT2,"50","60","90"]
のような形にしてテーブル表示させたい。
このようなやり方は正しいでしょうか? もっとスマートなやり方があれば是非教えて下さい。
質問の jsfiddle にあるコードだと、以下のような問題があります。
スマートなやり方かどうかは分かりませんが、UNIT* 毎にデータを集計したいのであれば、連想配列を使うのが良いと思います。
dataArray4 =[ ["2015/11/25 16:40:58","2015/11/25","鈴木","UNIT1","80"], ["2015/11/25 16:40:59","2015/11/25","鈴木","UNIT1","40"], ["2015/11/25 16:40:60","2015/11/25","鈴木","UNIT2","50"], ["2015/11/25 16:40:61","2015/11/25","鈴木","UNIT2","60"], ["2015/11/25 16:40:61","2015/11/25","鈴木","UNIT2","90"], ]; // データの集計 var tableMap = {}; // 連想配列(添え字が文字列) for (var i=0; i<dataArray4.length; i++){ var key = dataArray4[i][3]; var rec = tableMap[key]; if (! rec) { // 最初は何も入ってない rec = []; } rec.push(dataArray4[i][4]); tableMap[key] = rec; }
こうやって集計すると、例えば tableMap[ "UNIT2" ][ 1 ] が 60 になります。
一覧表を作るところも含めて jsfiddle にコードを置いてみました。
https://jsfiddle.net/a_kuma3/p50gb5o7/1/
そうです。
i = 2 の時点では、tableMap にはキーが "UNIT1" のデータしか入っていないので、"UNIT2" で取り出すと null が取り出されます。
そうです。
最初に空の配列を全てセットしておく、という手もあります。
分かりやすいように、やや冗長に書いています。
2015/11/26 16:01:41もっと短く書くと、こんな風に書けます。
なるほど、とても勉強になります。
2015/11/26 16:24:25ありがとうございます。
2番目の空の配列を用意しておくやり方が分かりやすいです。
どうもありがとうございました。