質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

Q&A

1回答

1994閲覧

Angular js 表示 一部合計

snakeriver

総合スコア76

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

0グッド

1クリップ

投稿2016/09/09 04:40

編集2016/09/09 04:42

Spring framework(boot)
にてviewをJavaScript, html はangular jsをしようしています。

以下のような社員作業時間数を表示ページがあります。
idとdateが同じ列のhours の合計、totalを表示させたいのですが、
どうすればいいでしょうか。
html でng-repeat で表示しているので、
合計時間数hours をどう記述し、表示させればいいのかわかりません。
よろしくおねがいします。

date      | id   | hours | Work
2016-09-01  | ID1  |  1 | A
2016-09-01  | ID1  |  2 | B


total: 3 hours 


P

2016-09-01  | ID2  |  3 | A


2016-09-01  | ID2  |  4 | B


total: 7 hours

2016-09-02  | ID1  |  5 | C


total: 5 hours

2016-09-02  | ID2  |  6 | D


total: 6 hours

JavaScript の表示のための処理は以下のようになっています。

if(report[staffData.id] == null){ report[staffData.id]= []; } if(report[staffData.id][attendance.date] == null){ report[staffData.id][attendance.date] = []; $scope.report[staffData.id][attendance.date].push({ hours: report.hours, work: report.work }); }else if(report[staffData.id][attendance.date].length != 0){ report[staffData.id][attendance.date].length+1; $scope.report[staffData.id][attendance.date].push({ hours: report.hours, work: report.work }); }

htmlは以下のようになっています。

<tr> <th>日付</th> <th>ID</th> <th>作業時間数</th> <th>作業内容</th> </tr> <tr ng-repeat="report in report[staffData.id][attendance.date]"> <td>{{report.date}}</td> <td>{{report.id}}</td> <td>{{report.hours}}</td> <td>{{report.work}}</td> </tr>

データはデバックで見て見ますと、いかのような連想配列になっています。

var data ={ data1:{ date:"2016-09-01", id: "ID1", hours:"1", work: A }, data2:{ date:"2016-09-01", id: "ID1", hours:"2", work: B }, data3:{ date:"2016-09-01", id: "ID2", hours:"3", work: A }, data4:{ date:"2016-09-01", id: "ID2", hours:"4", work: B }, data5:{ date:"2016-09-02", id: "ID1", hours:"5", work: C }, data6:{ date:"2016-09-02", id: "ID2", hours:"6", works: D }, };

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

data6だけworksだったのでworkに変更

javascript

1$scope.data = { 2 data1: {date: "2016-09-01", id: "ID1", hours: "1", work: "A"}, 3 data2: {date: "2016-09-01", id: "ID1", hours: "2", work: "B"}, 4 data3: {date: "2016-09-01", id: "ID2", hours: "3", work: "A"}, 5 data4: {date: "2016-09-01", id: "ID2", hours: "4", work: "B"}, 6 data5: {date: "2016-09-02", id: "ID1", hours: "5", work: "C"}, 7 data6: {date: "2016-09-02", id: "ID2", hours: "6", work: "D"} 8 }; 9 10 $scope.ret = []; 11 (() => { 12 var ret = []; 13 var hoursTotal = 0; 14 var beforKey = {date: '', id: ''}; 15 var isSame = (befor, current) => befor.date === '' ? true : befor.date === current.date && befor.id === current.id; 16 17 for (elem in $scope.data) { 18 var tmp = $scope.data[elem]; 19 20 if (isSame(beforKey, tmp)) { 21 hoursTotal += parseInt(tmp.hours); 22 } else { 23 ret.push({date: 'total', id: '', hours: hoursTotal, work: ''}); 24 hoursTotal = parseInt(tmp.hours); 25 } 26 ret.push({date: tmp.date, id: tmp.id, hours: tmp.hours, work: tmp.work}); 27 beforKey = {date: tmp.date, id: tmp.id}; 28 } 29 ret.push({date: 'total', id: '', hours: hoursTotal, work: ''}); 30 $scope.ret = ret; 31 })();

html

1<div ng-repeat="report in ret"> 2 <span ng-bind="report.date"></span> 3 <span>|</span> 4 <span ng-bind="report.id"></span> 5 <span>|</span> 6 <span ng-bind="report.hours"></span> 7 <span>|</span> 8 <span ng-bind="report.work"></span> 9</div>

結果
![イメージ説明

投稿2016/09/09 06:55

pinpikokun

総合スコア376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

snakeriver

2016/09/09 08:52 編集

(() => {})(); はどういったものでしょう。なんていう記述ですか。 後、var isSame = (befor, current) => befor.date === '' ? true : befor.date === current.date && befor.id === current.id; とif文の中のisSameは関連してますか。
pinpikokun

2016/09/09 08:47 編集

(function(){})() と同じ意味です。 functionを()で囲んで最後に()を付けるのは即時関数といい、読み込まれた後に即時実行されます。簡略化するために即時関数にしているだけで「$scope.ret = function(){}」としてhtmlが読み込まれるタイミングで「<div ng-repeat="report in ret()">」を呼んでも同じです。 =>の記号はアロー関数といいます、簡単に言うとfunctionを省略して書いているだけなのでfunctionにしても処理に影響はありません。 http://qiita.com/katsukii/items/cfe9fd968ba0db603b1e http://qiita.com/takeharu/items/c23998d22903e6d3c1d9
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問