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

回答編集履歴

1

追記

2020/08/05 07:14

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

answer CHANGED
@@ -15,7 +15,6 @@
15
15
  else {
16
16
  this.set( key,val );
17
17
  }
18
-
19
18
  }
20
19
  static fromPairs( a ){
21
20
  let m = new MyMap();
@@ -29,4 +28,26 @@
29
28
  var dstAry = MyMap.fromPairs(aryOriginal).entries();
30
29
  console.log( [...dstAry] ); // [["a",400],["b",200]]
31
30
 
32
- ```
31
+ ```
32
+
33
+ 追記)
34
+
35
+ [Array#reduce](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)を使う例:
36
+
37
+ ```javascript
38
+ var src = [["a",100],["b",200],["a",300]];
39
+ var dst = Object.entries(src.reduce((o,[k,v])=>(o.hasOwnProperty(k)?o[k]+=v:o[k]=v,o),{}));
40
+ /*
41
+ var dst = Object.entries(src.reduce((o,[k,v])=> {
42
+ o.hasOwnProperty(k)
43
+ ? o[k]+=v
44
+ : o[k]=v;
45
+ return o},{}));
46
+ */
47
+ console.log( dst );
48
+ ```
49
+
50
+ 処理内容は他の回答と同様です。
51
+ 1. オブジェクトを連想配列のように扱う(initialValueに ``{}`` を与えて重複のない key-value を作る)。
52
+ [Object#hasOwnProperty()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty) を使うのは、初めて処理するペアの値に``0``があると falsyとなるため。
53
+ 2. Object.entries() で配列化する。