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

回答編集履歴

31

テキスト修正

2019/01/03 03:23

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -168,7 +168,7 @@
168
168
  (data, name) => console.log(`${data}${data ? name : '不明'}`)
169
169
  );
170
170
  ```
171
- - **動作確認用サンプル(6):** [https://jsfiddle.net/jun68ykt/b5fs6rou/1/](https://jsfiddle.net/jun68ykt/b5fs6rou/1/)
171
+ - **動作確認用サンプル(6):** [https://jsfiddle.net/jun68ykt/b5fs6rou/2/](https://jsfiddle.net/jun68ykt/b5fs6rou/2/)
172
172
 
173
173
  ### 追記3
174
174
 

30

テキスト修正

2019/01/03 03:23

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -193,7 +193,7 @@
193
193
  }
194
194
  ```
195
195
 
196
- - **動作確認用サンプル(7):** [https://jsfiddle.net/jun68ykt/jfahcL1e/20/](https://jsfiddle.net/jun68ykt/jfahcL1e/20/)
196
+ - **動作確認用サンプル(7):** [https://jsfiddle.net/jun68ykt/jfahcL1e/22/](https://jsfiddle.net/jun68ykt/jfahcL1e/22/)
197
197
 
198
198
  修正の要点は以下の2点です。
199
199
 

29

テキスト修正

2019/01/03 03:22

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -172,7 +172,7 @@
172
172
 
173
173
  ### 追記3
174
174
 
175
- ここまでの回答では、`forEach`, `map`, `filter` および `Map` などを使用しましたが、ご質問に挙げられている `name_mail` と `name_data` に対する、二重のforループのコードを少し修正して、ご希望の出力を得ようとするならば、例えば以下のようにすればよいかと思います。
175
+ ここまでの回答では、`forEach`, `map`, `filter` および `Map` などを使用しましたが、ご質問に挙げられている二重のforループのコードを少し修正して、ご希望の出力を得ようとするならば、例えば以下のようにすればよいかと思います。
176
176
 
177
177
  ```javascript
178
178
  const name_mail = [["鈴木"], ["田中"], ["佐藤"], ["池田"], ["小林"], ["村田"], ["中野"], ["山田"], ["村西"], ["坂本"]];

28

テキスト修正

2019/01/03 02:47

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -180,7 +180,7 @@
180
180
 
181
181
  for(let i=0; i < 11; i ++ ) {
182
182
  let matched = false;
183
- for( let j=0; j < 3; j ++ ) {
183
+ for(let j=0; j < 3; j ++ ) {
184
184
  if (name_mail[i] == name_data[j][0]) {
185
185
  matched = true;
186
186
  console.log(`${name_data[j][1]}${name_data[j][0]}`);
@@ -193,9 +193,9 @@
193
193
  }
194
194
  ```
195
195
 
196
- - **動作確認用サンプル(7):** [https://jsfiddle.net/jun68ykt/jfahcL1e/19/](https://jsfiddle.net/jun68ykt/jfahcL1e/19/)
196
+ - **動作確認用サンプル(7):** [https://jsfiddle.net/jun68ykt/jfahcL1e/20/](https://jsfiddle.net/jun68ykt/jfahcL1e/20/)
197
197
 
198
198
  修正の要点は以下の2点です。
199
199
 
200
- - `0不明` の出力は、内側のループ、`for( let j=0; j < 3; j ++ ) {・・・}` から抜けてから行う。
200
+ - `0不明` の出力は、内側のループ、`for(let j=0; j < 3; j ++ ) {・・・}` から抜けてから行う。
201
201
  - 内側のループで値が見つかったのか否かの結果を、ループから抜けた後に参照できるようにする。(上記のコードではそのために、`matched` というフラグを追加)

27

テキスト修正

2019/01/03 02:27

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -27,7 +27,7 @@
27
27
 
28
28
  以上参考になれば幸いです。
29
29
 
30
- ### 追記
30
+ ### 追記1
31
31
 
32
32
  `name_data` に該当する要素がないものに対して `0不明` を出力させるようにするには、例えば以下
33
33
 
@@ -168,4 +168,34 @@
168
168
  (data, name) => console.log(`${data}${data ? name : '不明'}`)
169
169
  );
170
170
  ```
171
- - **動作確認用サンプル(6):** [https://jsfiddle.net/jun68ykt/b5fs6rou/1/](https://jsfiddle.net/jun68ykt/b5fs6rou/1/)
171
+ - **動作確認用サンプル(6):** [https://jsfiddle.net/jun68ykt/b5fs6rou/1/](https://jsfiddle.net/jun68ykt/b5fs6rou/1/)
172
+
173
+ ### 追記3
174
+
175
+ ここまでの回答では、`forEach`, `map`, `filter` および `Map` などを使用しましたが、ご質問に挙げられている `name_mail` と `name_data` に対する、二重のforループのコードを少し修正して、ご希望の出力を得ようとするならば、例えば以下のようにすればよいかと思います。
176
+
177
+ ```javascript
178
+ const name_mail = [["鈴木"], ["田中"], ["佐藤"], ["池田"], ["小林"], ["村田"], ["中野"], ["山田"], ["村西"], ["坂本"]];
179
+ const name_data = [["鈴木", 1], ["田中", 2], ["池田", 3]];
180
+
181
+ for(let i=0; i < 11; i ++ ) {
182
+ let matched = false;
183
+ for( let j=0; j < 3; j ++ ) {
184
+ if (name_mail[i] == name_data[j][0]) {
185
+ matched = true;
186
+ console.log(`${name_data[j][1]}${name_data[j][0]}`);
187
+ break;
188
+ }
189
+ }
190
+ if (!matched) {
191
+ console.log('0不明');
192
+ }
193
+ }
194
+ ```
195
+
196
+ - **動作確認用サンプル(7):** [https://jsfiddle.net/jun68ykt/jfahcL1e/19/](https://jsfiddle.net/jun68ykt/jfahcL1e/19/)
197
+
198
+ 修正の要点は以下の2点です。
199
+
200
+ - `0不明` の出力は、内側のループ、`for( let j=0; j < 3; j ++ ) {・・・}` から抜けてから行う。
201
+ - 内側のループで値が見つかったのか否かの結果を、ループから抜けた後に参照できるようにする。(上記のコードではそのために、`matched` というフラグを追加)

26

テキスト修正

2019/01/03 02:12

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -135,10 +135,10 @@
135
135
 
136
136
  ここまでに示した回答では、配列 `name_data` からMapを作っていましたが、 別案として、`name_mail` と`name_data` の両方の配列が持つ内容をマージしたエントリを含むMapを作る方法を挙げます。
137
137
 
138
- 具体的には、以下の条件
138
+ 具体的には、以下の2条件
139
139
 
140
- - `name_mail` に含まれる名前の全てをキーとして持っている
140
+ - `name_mail` または `name_data` 、あるいは両方に含まれる名前(人名姓)の全てをキーとして持
141
- - 各キーに対する値としては、デフォルト値は 0 で、`name_data` に格納さていれば、その値とする。
141
+ - 各キーに対する値としては、デフォルト値は 0 で、`name_data` に同じキーのエントリれば、その値とする。
142
142
 
143
143
  を満たすMapオブジェクトを、
144
144
  ```

25

テキスト修正

2019/01/02 23:51

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -133,17 +133,20 @@
133
133
 
134
134
  ### 追記2
135
135
 
136
- 補足す。別案として、以下ようなMapオブェクトを作る方法を挙げます。
136
+ ここまに示した回答では、配列 `name_data` からMapを作っていましたが、 別案として、`name_mail` と`name_data` 両方の配列が持つ内容をマーしたエン含むMapを作る方法を挙げます。
137
137
 
138
+ 具体的には、以下の条件
139
+
138
140
  - `name_mail` に含まれる名前の全てをキーとして持っている。
139
141
  - 各キーに対する値としては、デフォルト値は 0 で、`name_data` に値が格納されていれば、その値とする。
140
142
 
141
- 上記を満たす Map 、`name_data_map`
143
+ を満たすMapオブジェクト
142
144
  ```
143
145
  const name_data_map = new Map([...name_mail.map(e => [e[0], 0]), ...name_data]);
144
146
  ```
145
147
 
148
+ で作成できます。
146
- で作成できます。は以下のような内容を持つMapオブジェクトになります。
149
+ の `name_data_map` は以下のような内容を持つMapオブジェクトになります。
147
150
  ```
148
151
  Map {
149
152
  '鈴木' => 1,

24

テキスト修正

2019/01/02 23:44

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -143,7 +143,7 @@
143
143
  const name_data_map = new Map([...name_mail.map(e => [e[0], 0]), ...name_data]);
144
144
  ```
145
145
 
146
- で作成ます。これは以下のような内容を持つMapオブジェクトになります。
146
+ で作成できます。これは以下のような内容を持つMapオブジェクトになります。
147
147
  ```
148
148
  Map {
149
149
  '鈴木' => 1,

23

テキスト修正

2019/01/02 03:21

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -158,7 +158,7 @@
158
158
  '坂本' => 0 }
159
159
  ```
160
160
 
161
- これ使って、各エントリをご要望の形式で出力するには以下のようにします。(**※ソート処理は加えていません。**)
161
+ これ使って、各エントリをご要望の形式で出力するには以下のようにします。(**※ソート処理は加えていません。**)
162
162
 
163
163
  ```
164
164
  name_data_map.forEach(

22

テキスト修正

2019/01/01 23:36

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -138,12 +138,12 @@
138
138
  - `name_mail` に含まれる名前の全てをキーとして持っている。
139
139
  - 各キーに対する値としては、デフォルト値は 0 で、`name_data` に値が格納されていれば、その値とする。
140
140
 
141
- 上記を満たす `name_data_map`
141
+ 上記を満たす Map 、`name_data_map`
142
142
  ```
143
143
  const name_data_map = new Map([...name_mail.map(e => [e[0], 0]), ...name_data]);
144
144
  ```
145
145
 
146
- で作とができ、以下のような内容を持つMapオブジェクトになります。
146
+ で作成します。れは以下のような内容を持つMapオブジェクトになります。
147
147
  ```
148
148
  Map {
149
149
  '鈴木' => 1,

21

テキスト修正

2019/01/01 10:56

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -133,7 +133,7 @@
133
133
 
134
134
  ### 追記2
135
135
 
136
- 補足です。別案として、以下のようなMapオブジェクトを作る方法を挙げます。(**※ソート処理は加えていません。**)
136
+ 補足です。別案として、以下のようなMapオブジェクトを作る方法を挙げます。
137
137
 
138
138
  - `name_mail` に含まれる名前の全てをキーとして持っている。
139
139
  - 各キーに対する値としては、デフォルト値は 0 で、`name_data` に値が格納されていれば、その値とする。
@@ -158,7 +158,7 @@
158
158
  '坂本' => 0 }
159
159
  ```
160
160
 
161
- これ使って、各エントリをご要望の形式で出力するには以下のようにします。
161
+ これ使って、各エントリをご要望の形式で出力するには以下のようにします。(**※ソート処理は加えていません。**)
162
162
 
163
163
  ```
164
164
  name_data_map.forEach(

20

テキスト修正

2019/01/01 07:28

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -133,7 +133,7 @@
133
133
 
134
134
  ### 追記2
135
135
 
136
- 補足です。別案として、以下のようなMapオブジェクトを作る方法を挙げます。(ソート処理は加えていません。)
136
+ 補足です。別案として、以下のようなMapオブジェクトを作る方法を挙げます。(**※ソート処理は加えていません。**
137
137
 
138
138
  - `name_mail` に含まれる名前の全てをキーとして持っている。
139
139
  - 各キーに対する値としては、デフォルト値は 0 で、`name_data` に値が格納されていれば、その値とする。
@@ -158,7 +158,7 @@
158
158
  '坂本' => 0 }
159
159
  ```
160
160
 
161
- これを以下のようにして表示させます。
161
+ これ使って、各エントリご要望の形式で出力するには以下のようにします。
162
162
 
163
163
  ```
164
164
  name_data_map.forEach(

19

テキスト修正

2019/01/01 07:26

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -133,30 +133,36 @@
133
133
 
134
134
  ### 追記2
135
135
 
136
- 補足です。
137
- 出力の順番にこだわらないのあればで、以下はどでしょう?
136
+ 補足です。別案として、以下のよなMapオブジェクトを作る方法を挙げます。(ソート処理は加えていません。)
138
137
 
138
+ - `name_mail` に含まれる名前の全てをキーとして持っている。
139
+ - 各キーに対する値としては、デフォルト値は 0 で、`name_data` に値が格納されていれば、その値とする。
140
+
141
+ 上記を満たす `name_data_map` は
139
142
  ```
140
- new Map([...name_mail, ...name_data]).forEach(
143
+ const name_data_map = new Map([...name_mail.map(e => [e[0], 0]), ...name_data]);
141
- (data, name) => console.log(`${data || 0}${data ? name : '不明'}`)
142
- );
143
144
  ```
144
- - **動作確認用サンプル(6):** [https://jsfiddle.net/jun68ykt/5xm4veyk/6/](https://jsfiddle.net/jun68ykt/5xm4veyk/6/)
145
145
 
146
- 上記は、(値が undefined のエントリを意図的に追加すということをやっているので、ちょっとトリッキーかもしれませんが、) `new Map([...name_mail, ...name_data])` によって、以下
146
+ で作ること、以下のような内容を持つMapオブジェクトになります。
147
-
148
147
  ```
149
148
  Map {
150
149
  '鈴木' => 1,
151
150
  '田中' => 2,
152
- '佐藤' => undefined,
151
+ '佐藤' => 0,
153
152
  '池田' => 3,
154
- '小林' => undefined,
153
+ '小林' => 0,
155
- '村田' => undefined,
154
+ '村田' => 0,
156
- '中野' => undefined,
155
+ '中野' => 0,
157
- '山田' => undefined,
156
+ '山田' => 0,
158
- '村西' => undefined,
157
+ '村西' => 0,
159
- '坂本' => undefined }
158
+ '坂本' => 0 }
160
159
  ```
161
160
 
162
- のような内容のMapオブジェクトが作られることを利用してます。
161
+ これを以下のようして表示させます。
162
+
163
+ ```
164
+ name_data_map.forEach(
165
+ (data, name) => console.log(`${data}${data ? name : '不明'}`)
166
+ );
167
+ ```
168
+ - **動作確認用サンプル(6):** [https://jsfiddle.net/jun68ykt/b5fs6rou/1/](https://jsfiddle.net/jun68ykt/b5fs6rou/1/)

18

テキスト修正

2019/01/01 00:46

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -129,4 +129,34 @@
129
129
  .forEach(e => console.log(`${e.data}${e.name}`));
130
130
 
131
131
  ```
132
- - **動作確認用サンプル(5):** [https://jsfiddle.net/jun68ykt/rjeh3gbv/73/](https://jsfiddle.net/jun68ykt/rjeh3gbv/73/)
132
+ - **動作確認用サンプル(5):** [https://jsfiddle.net/jun68ykt/rjeh3gbv/73/](https://jsfiddle.net/jun68ykt/rjeh3gbv/73/)
133
+
134
+ ### 追記2
135
+
136
+ 補足です。
137
+ 出力の順番にこだわらないのであればですが、以下はどうでしょう?
138
+
139
+ ```
140
+ new Map([...name_mail, ...name_data]).forEach(
141
+ (data, name) => console.log(`${data || 0}${data ? name : '不明'}`)
142
+ );
143
+ ```
144
+ - **動作確認用サンプル(6):** [https://jsfiddle.net/jun68ykt/5xm4veyk/6/](https://jsfiddle.net/jun68ykt/5xm4veyk/6/)
145
+
146
+ 上記は、(値が undefined のエントリを意図的に追加するということをやっているので、ちょっとトリッキーかもしれませんが、) `new Map([...name_mail, ...name_data])` によって、以下
147
+
148
+ ```
149
+ Map {
150
+ '鈴木' => 1,
151
+ '田中' => 2,
152
+ '佐藤' => undefined,
153
+ '池田' => 3,
154
+ '小林' => undefined,
155
+ '村田' => undefined,
156
+ '中野' => undefined,
157
+ '山田' => undefined,
158
+ '村西' => undefined,
159
+ '坂本' => undefined }
160
+ ```
161
+
162
+ のような内容のMapオブジェクトが作られることを利用しています。

17

テキスト修正

2018/12/31 09:59

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -41,7 +41,7 @@
41
41
 
42
42
  - **動作確認用サンプル(2):** [https://jsfiddle.net/jun68ykt/rjeh3gbv/30/](https://jsfiddle.net/jun68ykt/rjeh3gbv/30/)
43
43
 
44
- のようにするか、もしくは、shou6 さんがコメントでフォローして下さっているように ` if (map.has(name)) ` に対する `else` を追加して、以下
44
+ のようにするか、もしくは、shou6 さんがコメントでフォローして下さっているように、[動作確認用サンプル(1)](https://jsfiddle.net/jun68ykt/rjeh3gbv/21/) のコードの ` if (map.has(name)) ` に対する `else` を追加して、以下
45
45
 
46
46
  ```javascript
47
47
  name_mail.forEach(([name]) => {
@@ -69,7 +69,7 @@
69
69
  0不明
70
70
  0不明
71
71
 
72
- もし、上記では望ましくなく
72
+ 上記のように、 `2田中` と `3池田` との間に、1個の `0不明` が出力されますが、もし、これが望んいる出力ではなく、
73
73
 
74
74
  > 1鈴木
75
75
  2田中
@@ -87,7 +87,7 @@
87
87
  - かつ、それらはname_data に含まれる数値の昇順に並んでおり、
88
88
  - その後に該当なしのものに対応する、`0不明` が出力される。
89
89
 
90
- という順出力させたいのであれば、どこかで [sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) を使う必要があり、もう一工夫が必要ですね。一例として、以下のようにしてみました。
90
+ という順序を保って出力させたいのであれば、どこかで [sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) を使う必要があり、もう一工夫が必要ですね。一例として、以下のようにしてみました。
91
91
 
92
92
  ```javascript
93
93
  const names = name_mail.map(([name]) => name);

16

テキスト修正

2018/12/31 08:09

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -29,7 +29,7 @@
29
29
 
30
30
  ### 追記
31
31
 
32
- `name_data` に該当する要素がないものについは、 `0不明` を出力するには、以下
32
+ `name_data` に該当する要素がないものに対して `0不明` を出力させるようにするには、例えば以下
33
33
 
34
34
  ```javascript
35
35
  name_mail.forEach(([name]) => {

15

テキスト修正

2018/12/31 07:45

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -114,7 +114,7 @@
114
114
 
115
115
  を Lodash の [shuffle](https://lodash.com/docs/4.17.11#shuffle) でランダムに並び替えてから、結果を得るためのロジックを動かしていますが、望む結果になっていることが確認できると思います。
116
116
 
117
- とはいえ上記のサンプル(4)では、`matched_ary` と `unmatched_ary` の2つの配列を作って、結果の表示のために再度結合していますが、これはやや回りくどいですね。これを回避する、ソートキーとなるプロパティを別に追加して、name_dataから作ったマップに該当なしの場合、昇順でソートした時に後ろにくるように非常に大きな値を入れることにしました。それが以下です。
117
+ とはいえ上記のサンプル(4)では、`matched_ary` と `unmatched_ary` の2つの配列を作って、結果の表示のために再度結合しておりやや回りくどいですね。これを回避するため、ソートキーとなるプロパティを別に追加して、name_dataから作ったマップに該当なしの場合、昇順でソートした時に後ろにくるように非常に大きな値を入れることにしました。それが以下です。
118
118
 
119
119
  ```javascript
120
120
  const m = new Map(name_data);

14

テキスト修正

2018/12/31 07:31

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -117,16 +117,16 @@
117
117
  とはいえ上記のサンプル(4)では、`matched_ary` と `unmatched_ary` の2つの配列を作って、結果の表示のために再度結合していますが、これはやや回りくどいですね。これを回避するに、ソートキーとなるプロパティを別に追加して、name_dataから作ったマップに該当なしの場合、昇順でソートした時に後ろにくるように非常に大きな値を入れることにしました。それが以下です。
118
118
 
119
119
  ```javascript
120
- const names = name_mail.map(([name]) => name);
121
120
  const m = new Map(name_data);
122
121
 
123
- names
122
+ name_mail
124
- .map(name => ({
123
+ .map(([name]) => ({
125
124
  name: m.has(name) ? name : '不明',
126
125
  data: m.get(name) || 0,
127
126
  order: m.get(name) || Number.MAX_SAFE_INTEGER
128
127
  }))
129
128
  .sort((e1,e2) => e1.order - e2.order)
130
129
  .forEach(e => console.log(`${e.data}${e.name}`));
130
+
131
131
  ```
132
- - **動作確認用サンプル(5):** [https://jsfiddle.net/jun68ykt/rjeh3gbv/71/](https://jsfiddle.net/jun68ykt/rjeh3gbv/71/)
132
+ - **動作確認用サンプル(5):** [https://jsfiddle.net/jun68ykt/rjeh3gbv/73/](https://jsfiddle.net/jun68ykt/rjeh3gbv/73/)

13

テキスト修正

2018/12/31 07:28

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -105,20 +105,16 @@
105
105
  matched_ary.concat(unmatched_ary).forEach(str => console.log(str));
106
106
  ```
107
107
 
108
- 上記のコードを動作確認するためのサンプルを、以下
109
-
110
108
  - **動作確認用サンプル(4):** [https://jsfiddle.net/jun68ykt/rjeh3gbv/50/](https://jsfiddle.net/jun68ykt/rjeh3gbv/50/)
111
109
 
112
- に作成しました。
113
-
114
- なお、上記サンプル(4)では、正しく動作するかの検証のために、最初に与えられた2つの配列
110
+ なお、上記の[サンプル(4)](https://jsfiddle.net/jun68ykt/rjeh3gbv/50/)では、正しく動作するかの検証のために、最初に与えられた2つの配列
115
111
  - `name_mail`
116
112
  - `name_data`
117
113
 
118
114
 
119
115
  を Lodash の [shuffle](https://lodash.com/docs/4.17.11#shuffle) でランダムに並び替えてから、結果を得るためのロジックを動かしていますが、望む結果になっていることが確認できると思います。
120
116
 
121
- もう一つ、上記のサンプル(4)では、`matched_ary` と `unmatched_ary` の2つの配列を作って、結果の表示のために再度結合していますが、これはやや回りくどいですね。これを回避するに、ソートキーとなるプロパティを別に追加して、name_dataから作ったマップに該当なしの場合、昇順でソートした時に後ろにくるように非常に大きな値を入れま。それが以下です。
117
+ とはいえ上記のサンプル(4)では、`matched_ary` と `unmatched_ary` の2つの配列を作って、結果の表示のために再度結合していますが、これはやや回りくどいですね。これを回避するに、ソートキーとなるプロパティを別に追加して、name_dataから作ったマップに該当なしの場合、昇順でソートした時に後ろにくるように非常に大きな値を入れることにしした。それが以下です。
122
118
 
123
119
  ```javascript
124
120
  const names = name_mail.map(([name]) => name);

12

テキスト修正

2018/12/31 07:17

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -87,10 +87,8 @@
87
87
  - かつ、それらはname_data に含まれる数値の昇順に並んでおり、
88
88
  - その後に該当なしのものに対応する、`0不明` が出力される。
89
89
 
90
- という順で出力させたいのであれば、もう一工夫が必要ですね。
90
+ という順で出力させたいのであれば、どこかで [sort](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) を使う必要があり、もう一工夫が必要ですね。一例として、以下のようにしてみました。
91
91
 
92
- 一例として、以下のようにしてみました。
93
-
94
92
  ```javascript
95
93
  const names = name_mail.map(([name]) => name);
96
94
  const m = new Map(name_data);

11

テキスト修正

2018/12/31 05:45

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -120,7 +120,7 @@
120
120
 
121
121
  を Lodash の [shuffle](https://lodash.com/docs/4.17.11#shuffle) でランダムに並び替えてから、結果を得るためのロジックを動かしていますが、望む結果になっていることが確認できると思います。
122
122
 
123
- もう一つ、上記のサンプル(4)では、`matched_ary` と `unmatched_ary` の2つの配列を作って、結果の表示のために再度結合していますが、これはやや回りくどいですね。これを回避するには、ソートキーとなるプロパティを追加して、name_dataから作ったマップに該当なしの場合、昇順でソートした時に後ろにくるように非常に大きな値を入れます。それが以下です。
123
+ もう一つ、上記のサンプル(4)では、`matched_ary` と `unmatched_ary` の2つの配列を作って、結果の表示のために再度結合していますが、これはやや回りくどいですね。これを回避するには、ソートキーとなるプロパティを別に追加して、name_dataから作ったマップに該当なしの場合、昇順でソートした時に後ろにくるように非常に大きな値を入れます。それが以下です。
124
124
 
125
125
  ```javascript
126
126
  const names = name_mail.map(([name]) => name);

10

テキスト修正

2018/12/31 04:08

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -83,9 +83,9 @@
83
83
  0不明
84
84
 
85
85
  のように、
86
- - name_data に該当の要素があるもの結果の先頭にあり
86
+ - name_data に該当の要素があるものは、出力結果の先頭に連続して出力され
87
87
  - かつ、それらはname_data に含まれる数値の昇順に並んでおり、
88
- - その後に該当なしのものが並ぶ
88
+ - その後に該当なしのものに対応する、`0不明` 出力される。
89
89
 
90
90
  という順で出力させたいのであれば、もう一工夫が必要ですね。
91
91
 

9

テキスト修正

2018/12/31 04:03

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -120,7 +120,7 @@
120
120
 
121
121
  を Lodash の [shuffle](https://lodash.com/docs/4.17.11#shuffle) でランダムに並び替えてから、結果を得るためのロジックを動かしていますが、望む結果になっていることが確認できると思います。
122
122
 
123
- もう一つ、上記のサンプル(4)では、`matched_ary` と `unmatched_ary` の2つの配列を作って、結果の表示のために再度結合していますが、これはやや回りくどいですね。これを回避するには、ソートキーとなる order というプロパティを追加して、該当なしの場合、昇順でソートした時に後ろにくるように非常に大きな値を入れます。それが以下です。
123
+ もう一つ、上記のサンプル(4)では、`matched_ary` と `unmatched_ary` の2つの配列を作って、結果の表示のために再度結合していますが、これはやや回りくどいですね。これを回避するには、ソートキーとなるプロパティを追加して、name_dataから作ったマップに該当なしの場合、昇順でソートした時に後ろにくるように非常に大きな値を入れます。それが以下です。
124
124
 
125
125
  ```javascript
126
126
  const names = name_mail.map(([name]) => name);

8

テキスト修正

2018/12/31 03:37

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
File without changes

7

テキスト修正

2018/12/31 00:19

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -129,10 +129,10 @@
129
129
  names
130
130
  .map(name => ({
131
131
  name: m.has(name) ? name : '不明',
132
- value: m.get(name) || 0,
132
+ data: m.get(name) || 0,
133
133
  order: m.get(name) || Number.MAX_SAFE_INTEGER
134
134
  }))
135
135
  .sort((e1,e2) => e1.order - e2.order)
136
- .forEach(e => console.log(`${e.value}${e.name}`));
136
+ .forEach(e => console.log(`${e.data}${e.name}`));
137
137
  ```
138
- - **動作確認用サンプル(5):** [https://jsfiddle.net/jun68ykt/rjeh3gbv/70/](https://jsfiddle.net/jun68ykt/rjeh3gbv/70/)
138
+ - **動作確認用サンプル(5):** [https://jsfiddle.net/jun68ykt/rjeh3gbv/71/](https://jsfiddle.net/jun68ykt/rjeh3gbv/71/)

6

テキスト修正

2018/12/31 00:16

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -82,8 +82,13 @@
82
82
  0不明
83
83
  0不明
84
84
 
85
+ のように、
86
+ - name_data に該当の要素があるものが結果の先頭にあり、
85
- のように、name_data に該当の要素があるものが結果の先頭にあり、かつ、それらはname_data に含まれる数値の昇順に並んでおり、その後に該当なしのものが並ぶ、という順で出力させたいのであれば、もう一工夫が必要ですね。
87
+ - かつ、それらはname_data に含まれる数値の昇順に並んでおり、
88
+ - その後に該当なしのものが並ぶ
86
89
 
90
+ という順で出力させたいのであれば、もう一工夫が必要ですね。
91
+
87
92
  一例として、以下のようにしてみました。
88
93
 
89
94
  ```javascript
@@ -115,16 +120,19 @@
115
120
 
116
121
  を Lodash の [shuffle](https://lodash.com/docs/4.17.11#shuffle) でランダムに並び替えてから、結果を得るためのロジックを動かしていますが、望む結果になっていることが確認できると思います。
117
122
 
118
- もう一つ、上記のサンプル(4)では、`matched_ary` と `unmatched_ary` の2つの配列を作って、結果の表示のために再度結合していますが、これはやや回りくどいですね。なので、ソートキーとなる order というプロパティを追加して、該当なしの場合、昇順でソートした時に後ろにくるように大きな値を入れることにしした
123
+ もう一つ、上記のサンプル(4)では、`matched_ary` と `unmatched_ary` の2つの配列を作って、結果の表示のために再度結合していますが、これはやや回りくどいですね。これを回避するには、ソートキーとなる order というプロパティを追加して、該当なしの場合、昇順でソートした時に後ろにくるように非常に大きな値を入れまそれが以下です。
119
- それが以下です。
120
124
 
121
125
  ```javascript
122
126
  const names = name_mail.map(([name]) => name);
123
127
  const m = new Map(name_data);
124
128
 
125
129
  names
130
+ .map(name => ({
131
+ name: m.has(name) ? name : '不明',
132
+ value: m.get(name) || 0,
126
- .map(name => ({ name, value: m.get(name) || 0, order: m.get(name) || Number.MAX_SAFE_INTEGER }))
133
+ order: m.get(name) || Number.MAX_SAFE_INTEGER
134
+ }))
127
135
  .sort((e1,e2) => e1.order - e2.order)
128
136
  .forEach(e => console.log(`${e.value}${e.name}`));
129
137
  ```
130
- - **動作確認用サンプル(5):** [https://jsfiddle.net/jun68ykt/rjeh3gbv/66/](https://jsfiddle.net/jun68ykt/rjeh3gbv/66/)
138
+ - **動作確認用サンプル(5):** [https://jsfiddle.net/jun68ykt/rjeh3gbv/70/](https://jsfiddle.net/jun68ykt/rjeh3gbv/70/)

5

テキスト修正

2018/12/31 00:13

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -115,20 +115,16 @@
115
115
 
116
116
  を Lodash の [shuffle](https://lodash.com/docs/4.17.11#shuffle) でランダムに並び替えてから、結果を得るためのロジックを動かしていますが、望む結果になっていることが確認できると思います。
117
117
 
118
- もう一つ、上記のサンプル(4)では、`matched_ary` と `unmatched_ary` の2つの配列を作って、結果の表示のために再度結合していますが、これはやや回りくどいですね。なので、該当なしの場合の数値としては、昇順ソート後ろにくるように非常に大き値を入れておき、出力時に 0 で出力するという細工をてみそれが以下です。
118
+ もう一つ、上記のサンプル(4)では、`matched_ary` と `unmatched_ary` の2つの配列を作って、結果の表示のために再度結合していますが、これはやや回りくどいですね。なので、ソートキーとなる order というプロパティを追加して、該当なしの場合、昇順ソートした時に後ろにくるように大き値を入れるしました
119
+ それが以下です。
119
120
 
120
121
  ```javascript
121
- const DEFAULT_ELEMENT = { name: '不明', value: 0 };
122
-
123
122
  const names = name_mail.map(([name]) => name);
124
123
  const m = new Map(name_data);
125
124
 
126
125
  names
127
- .map(name => ({ name, value: m.get(name) || Number.MAX_SAFE_INTEGER }))
126
+ .map(name => ({ name, value: m.get(name) || 0, order: m.get(name) || Number.MAX_SAFE_INTEGER }))
128
- .sort((e1,e2) => e1.value - e2.value)
127
+ .sort((e1,e2) => e1.order - e2.order)
129
- .forEach(e => {
130
- const { name, value } = e.value < Number.MAX_SAFE_INTEGER ? e : DEFAULT_ELEMENT;
131
- console.log(`${value}${name}`);
128
+ .forEach(e => console.log(`${e.value}${e.name}`));
132
- });
133
129
  ```
134
- - **動作確認用サンプル(5):** [https://jsfiddle.net/jun68ykt/rjeh3gbv/62/](https://jsfiddle.net/jun68ykt/rjeh3gbv/62/)
130
+ - **動作確認用サンプル(5):** [https://jsfiddle.net/jun68ykt/rjeh3gbv/66/](https://jsfiddle.net/jun68ykt/rjeh3gbv/66/)

4

テキスト修正

2018/12/31 00:06

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -115,7 +115,7 @@
115
115
 
116
116
  を Lodash の [shuffle](https://lodash.com/docs/4.17.11#shuffle) でランダムに並び替えてから、結果を得るためのロジックを動かしていますが、望む結果になっていることが確認できると思います。
117
117
 
118
- もう一つ、上記のサンプル(4)では、`matched_ary` と `unmatched_ary` の2つの配列を作って、結果の表示のために再度結合していますが、これはやや回りくどいですね。なので、該当なしの場合の数値として非常に大きい値を入れておき、出力時に 0 で出力するという細工をしてみます。それが以下です。
118
+ もう一つ、上記のサンプル(4)では、`matched_ary` と `unmatched_ary` の2つの配列を作って、結果の表示のために再度結合していますが、これはやや回りくどいですね。なので、該当なしの場合の数値としては、昇順ソートで後ろにくるように非常に大きい値を入れておき、出力時に 0 で出力するという細工をしてみます。それが以下です。
119
119
 
120
120
  ```javascript
121
121
  const DEFAULT_ELEMENT = { name: '不明', value: 0 };

3

テキスト修正

2018/12/30 23:56

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -21,8 +21,114 @@
21
21
  3池田
22
22
 
23
23
 
24
- 以下は、上記のコードを作確認するために jsFiddle に上げたものです。
24
+ 以下は、上記のコードを作確認するために jsFiddle に上げたものです。
25
25
 
26
- - [https://jsfiddle.net/jun68ykt/rjeh3gbv/21/](https://jsfiddle.net/jun68ykt/rjeh3gbv/21/)
26
+ - **動作確認用サンプル(1):** [https://jsfiddle.net/jun68ykt/rjeh3gbv/21/](https://jsfiddle.net/jun68ykt/rjeh3gbv/21/)
27
27
 
28
- 以上参考になれば幸いです。
28
+ 以上参考になれば幸いです。
29
+
30
+ ### 追記
31
+
32
+ `name_data` に該当する要素がないものについては、 `0不明` を出力するには、以下
33
+
34
+ ```javascript
35
+ name_mail.forEach(([name]) => {
36
+ const value = map.get(name) || 0;
37
+ const label = value ? name : '不明';
38
+ console.log(`${value}${label}`);
39
+ });
40
+ ```
41
+
42
+ - **動作確認用サンプル(2):** [https://jsfiddle.net/jun68ykt/rjeh3gbv/30/](https://jsfiddle.net/jun68ykt/rjeh3gbv/30/)
43
+
44
+ のようにするか、もしくは、shou6 さんがコメントでフォローして下さっているように ` if (map.has(name)) ` に対する `else` を追加して、以下
45
+
46
+ ```javascript
47
+ name_mail.forEach(([name]) => {
48
+ if (map.has(name)) {
49
+ console.log(`${map.get(name)}${name}`);
50
+ } else {
51
+ console.log('0不明');
52
+ }
53
+ });
54
+ ```
55
+ - **動作確認用サンプル(3):** [https://jsfiddle.net/jun68ykt/rjeh3gbv/33/](https://jsfiddle.net/jun68ykt/rjeh3gbv/33/)
56
+
57
+ のようにすればよいかと思います。
58
+
59
+ ただし上記のサンプル(2)または(3)だと、出力結果は、以下になります。
60
+
61
+ > 1鈴木
62
+ 2田中
63
+ 0不明
64
+ 3池田
65
+ 0不明
66
+ 0不明
67
+ 0不明
68
+ 0不明
69
+ 0不明
70
+ 0不明
71
+
72
+ もし、上記では望ましくなくて、
73
+
74
+ > 1鈴木
75
+ 2田中
76
+ 3池田
77
+ 0不明
78
+ 0不明
79
+ 0不明
80
+ 0不明
81
+ 0不明
82
+ 0不明
83
+ 0不明
84
+
85
+ のように、name_data に該当の要素があるものが結果の先頭にあり、かつ、それらはname_data に含まれる数値の昇順に並んでおり、その後に該当なしのものが並ぶ、という順で出力させたいのであれば、もう一工夫が必要ですね。
86
+
87
+ 一例として、以下のようにしてみました。
88
+
89
+ ```javascript
90
+ const names = name_mail.map(([name]) => name);
91
+ const m = new Map(name_data);
92
+
93
+ const matched_ary = names
94
+ .filter(name => m.has(name))
95
+ .sort((n1,n2) => m.get(n1) - m.get(n2))
96
+ .map(name => `${m.get(name)}${name}`);
97
+
98
+ const unmatched_ary = names
99
+ .filter(name => !m.has(name))
100
+ .map(_ => '0不明');
101
+
102
+ matched_ary.concat(unmatched_ary).forEach(str => console.log(str));
103
+ ```
104
+
105
+ 上記のコードを動作確認するためのサンプルを、以下
106
+
107
+ - **動作確認用サンプル(4):** [https://jsfiddle.net/jun68ykt/rjeh3gbv/50/](https://jsfiddle.net/jun68ykt/rjeh3gbv/50/)
108
+
109
+ に作成しました。
110
+
111
+ なお、上記サンプル(4)では、正しく動作するかの検証のために、最初に与えられた2つの配列
112
+ - `name_mail`
113
+ - `name_data`
114
+
115
+
116
+ を Lodash の [shuffle](https://lodash.com/docs/4.17.11#shuffle) でランダムに並び替えてから、結果を得るためのロジックを動かしていますが、望む結果になっていることが確認できると思います。
117
+
118
+ もう一つ、上記のサンプル(4)では、`matched_ary` と `unmatched_ary` の2つの配列を作って、結果の表示のために再度結合していますが、これはやや回りくどいですね。なので、該当なしの場合の数値として非常に大きい値を入れておき、出力時に 0 で出力するという細工をしてみます。それが以下です。
119
+
120
+ ```javascript
121
+ const DEFAULT_ELEMENT = { name: '不明', value: 0 };
122
+
123
+ const names = name_mail.map(([name]) => name);
124
+ const m = new Map(name_data);
125
+
126
+ names
127
+ .map(name => ({ name, value: m.get(name) || Number.MAX_SAFE_INTEGER }))
128
+ .sort((e1,e2) => e1.value - e2.value)
129
+ .forEach(e => {
130
+ const { name, value } = e.value < Number.MAX_SAFE_INTEGER ? e : DEFAULT_ELEMENT;
131
+ console.log(`${value}${name}`);
132
+ });
133
+ ```
134
+ - **動作確認用サンプル(5):** [https://jsfiddle.net/jun68ykt/rjeh3gbv/62/](https://jsfiddle.net/jun68ykt/rjeh3gbv/62/)

2

テキスト修正

2018/12/30 23:50

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -6,11 +6,11 @@
6
6
  const name_mail = [["鈴木"], ["田中"], ["佐藤"], ["池田"], ["小林"], ["村田"], ["中野"], ["山田"], ["村西"], ["坂本"]];
7
7
  const name_data = [["鈴木", 1], ["田中", 2], ["池田", 3]];
8
8
 
9
- const name_data_map = new Map(name_data);
9
+ const map = new Map(name_data);
10
10
 
11
11
  name_mail.forEach(([name]) => {
12
- if (name_data_map.has(name)) {
12
+ if (map.has(name)) {
13
- console.log(`${name_data_map.get(name)}${name}`);
13
+ console.log(`${map.get(name)}${name}`);
14
14
  }
15
15
  });
16
16
  ```
@@ -23,6 +23,6 @@
23
23
 
24
24
  以下は、上記のコードを同作確認するために jsFiddle に上げたものです。
25
25
 
26
- - [https://jsfiddle.net/jun68ykt/rjeh3gbv/19/](https://jsfiddle.net/jun68ykt/rjeh3gbv/19/)
26
+ - [https://jsfiddle.net/jun68ykt/rjeh3gbv/21/](https://jsfiddle.net/jun68ykt/rjeh3gbv/21/)
27
27
 
28
28
  以上参考になれば幸いです。

1

テキスト修正

2018/12/30 14:01

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -8,15 +8,21 @@
8
8
 
9
9
  const name_data_map = new Map(name_data);
10
10
 
11
- name_mail.map(e => e[0]).forEach(name => {
11
+ name_mail.forEach(([name]) => {
12
12
  if (name_data_map.has(name)) {
13
- console.log(`${name_data_map.get(name)} ${name}`);
13
+ console.log(`${name_data_map.get(name)}${name}`);
14
14
  }
15
15
  });
16
16
  ```
17
+ 実行結果:
17
18
 
19
+ > 1鈴木
20
+ 2田中
21
+ 3池田
22
+
23
+
18
24
  以下は、上記のコードを同作確認するために jsFiddle に上げたものです。
19
25
 
20
- - [https://jsfiddle.net/jun68ykt/rjeh3gbv/16/](https://jsfiddle.net/jun68ykt/rjeh3gbv/16/)
26
+ - [https://jsfiddle.net/jun68ykt/rjeh3gbv/19/](https://jsfiddle.net/jun68ykt/rjeh3gbv/19/)
21
27
 
22
28
  以上参考になれば幸いです。