回答編集履歴
2
回答を追記しました。
test
CHANGED
@@ -1 +1,59 @@
|
|
1
1
|
修正ポイントとして``for (var j = 0; j < ary_return.length ; j++) {``のループ内にある``ary_return.push([ary[i][0], ary[i][1], 1]);``の一つ下の行に``break;``を追加するのは如何でしょうか。
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
## 追記
|
6
|
+
|
7
|
+
> また可能であれば、元のデータの2次元配列の列数が3列でも10列でも対応できるような
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
上記の追加質問を失念しておりました。申し訳ありません。コメントにあるご希望の出力値から、3列目以降の値は出現した最初の値のみを結果に出力したいと理解しました。このような理解で問題がない場合、下記のような修正では如何でしょうか。
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
### 修正したスクリプト
|
16
|
+
|
17
|
+
```javascript
|
18
|
+
|
19
|
+
function totaling_ary(ary, col){
|
20
|
+
|
21
|
+
var ary_return = new Array();
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
ary_return.push([ary[0][0], ary[0][1]].concat(ary[0].slice(2, ary[0].length)).concat(1));
|
26
|
+
|
27
|
+
for (var i = 1; i < ary.length ; i++) {
|
28
|
+
|
29
|
+
for (var j = 0; j < ary_return.length ; j++) {
|
30
|
+
|
31
|
+
if (ary[i][0] == ary_return[j][0]){
|
32
|
+
|
33
|
+
ary_return[j][1] += parseInt(ary[i][1], 10);
|
34
|
+
|
35
|
+
ary_return[j][ary_return[j].length - 1] ++;
|
36
|
+
|
37
|
+
break;
|
38
|
+
|
39
|
+
} else if (j == ary_return.length - 1) {
|
40
|
+
|
41
|
+
ary_return.push([ary[i][0], ary[i][1]].concat(ary[i].slice(2, ary[i].length)).concat(1));
|
42
|
+
|
43
|
+
break;
|
44
|
+
|
45
|
+
}
|
46
|
+
|
47
|
+
}
|
48
|
+
|
49
|
+
}
|
50
|
+
|
51
|
+
return ary_return;
|
52
|
+
|
53
|
+
}
|
54
|
+
|
55
|
+
```
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
- ご提示されたサンプルでは``[a001, 1, 4/5], [a001, 2, 4/6], [a001, 3, 4/8], [a001, 4, 4/11]``の場合、ご希望の出力は``[a001, 10, 4/5, 4]``とありましたので、さらに列が追加されると、``[a001, 10, 4/5, 4]``が``[a001, 10, 4/5, sample1, sample2, 4]``としたいのではないかと推測しました。推測が間違っているようならすみません。
|
1
説明の追記
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
修正ポイントとして``ary_return.push([ary[i][0], ary[i][1], 1]);``の一つ下の行に``break;``を追加するのは如何でしょうか。
|
1
|
+
修正ポイントとして``for (var j = 0; j < ary_return.length ; j++) {``のループ内にある``ary_return.push([ary[i][0], ary[i][1], 1]);``の一つ下の行に``break;``を追加するのは如何でしょうか。
|