teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

7

テキスト修正

2020/10/02 16:17

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -7,4 +7,22 @@
7
7
  ```javascript
8
8
  const result = _.mapObject(arr, values => values.reduce((s, v) => s + v, 0))
9
9
  ```
10
- - **動作確認用codepen:** [/jun68ykt/pen/XWdLvJx](https://codepen.io/jun68ykt/pen/XWdLvJx?editors=0012)
10
+ - **動作確認用codepen:** [/jun68ykt/pen/XWdLvJx](https://codepen.io/jun68ykt/pen/XWdLvJx?editors=0012)
11
+
12
+ ## 追記
13
+
14
+ Underscore.jsを使わない案を追記します。このような場合、与えられるオブジェクトを
15
+
16
+ 1. Object.entries で、キーと値の組の配列にして、
17
+ 2. map で各プロパティの値に手を加え、
18
+ 3. Object.fromEntries でオブジェクトに戻す。
19
+
20
+ という手順が、よく使う定跡かなと思います。以下は、この手順によるサンプルです。配列要素の合計を算出する関数`sum`をあらかじめ作っておき、map に与える関数が読みやすくなるようにしています。
21
+
22
+ ```javascript
23
+ const sum = values => values.reduce((s, v) => s + v, 0)
24
+
25
+ const totals = Object.entries(arr).map(([k, values]) => [k, sum(values)])
26
+ const result = Object.fromEntries(totals);
27
+ ```
28
+ - **動作確認用codepen:** [/jun68ykt/pen/LYNKwMG](https://codepen.io/jun68ykt/pen/LYNKwMG?editors=0012)

6

テキスト修正

2020/10/02 16:17

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -5,6 +5,6 @@
5
5
  ということであれば、Underscore.jsの[_.mapObject](https://underscorejs.org/#mapObject) を使って、以下のようにするとよいかと思います。
6
6
 
7
7
  ```javascript
8
- const result = _.mapObject(arr, v => v.reduce((sum, e) => sum + e, 0))
8
+ const result = _.mapObject(arr, values => values.reduce((s, v) => s + v, 0))
9
9
  ```
10
10
  - **動作確認用codepen:** [/jun68ykt/pen/XWdLvJx](https://codepen.io/jun68ykt/pen/XWdLvJx?editors=0012)

5

テキスト修正

2020/10/02 15:49

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -5,6 +5,6 @@
5
5
  ということであれば、Underscore.jsの[_.mapObject](https://underscorejs.org/#mapObject) を使って、以下のようにするとよいかと思います。
6
6
 
7
7
  ```javascript
8
- const result = _.mapObject(arr, v => v.reduce((sum, e) => sum + e))
8
+ const result = _.mapObject(arr, v => v.reduce((sum, e) => sum + e, 0))
9
9
  ```
10
10
  - **動作確認用codepen:** [/jun68ykt/pen/XWdLvJx](https://codepen.io/jun68ykt/pen/XWdLvJx?editors=0012)

4

テキスト修正

2020/10/02 15:43

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,8 +1,8 @@
1
1
  こんにちは
2
2
 
3
- > Underscore.js
3
+ > Underscore.jsで、あるオブジェクトの値に対してreduceを適用させたいです。
4
4
 
5
- の[_.mapObject](https://underscorejs.org/#mapObject) を使って、以下のようにするとよいかと思います。
5
+ ということであれば、Underscore.jsの[_.mapObject](https://underscorejs.org/#mapObject) を使って、以下のようにするとよいかと思います。
6
6
 
7
7
  ```javascript
8
8
  const result = _.mapObject(arr, v => v.reduce((sum, e) => sum + e))

3

テキスト修正

2020/10/02 15:41

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > Underscore.js
4
4
 
5
- を使えるであれば、[_.mapObject](https://underscorejs.org/#mapObject) 、以下のようにするとよいかと思います。
5
+ の[_.mapObject](https://underscorejs.org/#mapObject) を使って、以下のようにするとよいかと思います。
6
6
 
7
7
  ```javascript
8
8
  const result = _.mapObject(arr, v => v.reduce((sum, e) => sum + e))

2

テキスト修正

2020/10/02 15:39

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,10 +1,7 @@
1
1
  こんにちは
2
2
 
3
- ご質問のタイトルにある reduce は使いませんが、
4
-
5
3
  > Underscore.js
6
4
 
7
-
8
5
  を使えるのであれば、[_.mapObject](https://underscorejs.org/#mapObject) で、以下のようにするとよいかと思います。
9
6
 
10
7
  ```javascript

1

テキスト修正

2020/10/02 15:38

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,7 +1,12 @@
1
1
  こんにちは
2
2
 
3
- [mapObject](https://underscorejs.org/#mapObject) 使えばよかと思いす。
3
+ ご質問のタイトルにある reduce は使いませんが、
4
4
 
5
+ > Underscore.js
6
+
7
+
8
+ を使えるのであれば、[_.mapObject](https://underscorejs.org/#mapObject) で、以下のようにするとよいかと思います。
9
+
5
10
  ```javascript
6
11
  const result = _.mapObject(arr, v => v.reduce((sum, e) => sum + e))
7
12
  ```