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

回答編集履歴

1

テキスト修正

2019/12/18 21:24

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  こんにちは
2
2
 
3
- 何が問題かというと、ご質問にあるようなことをやろうとしたときに、配列に用意されている様々なメソッドの中で [map](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map) を選んでしまった点かなと思います。map は、元の配列の各要素に何らかの処理をした結果、得られた値を各要素とする配列を得るメソッドです。したがって、map によって得られる配列の長さは、元の配列の長さと同じになります。map に与える関数が明示的なreturnで値を返さない場合、ご質問のコードでいうと `if(x[name] != ''){` の `if`条件が満たされなかった場合においても、出力の配列に何も追加されない**のではなく**、関数が明示的なreturnで終了しなかった場合の返り値としての udefined が追加されます。
3
+ 何が問題かというと、ご質問にあるようなことをやろうとしたときに、配列に用意されている様々なメソッドの中で [map](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map) を選んでしまった点かなと思います。map は、元の配列の各要素に何らかの処理をした結果、得られた値を各要素とする配列を得るメソッドです。したがって、map によって得られる配列の長さは、元の配列の長さと同じになります。map に与える関数が明示的なreturnで値を返さない場合、ご質問のコードでいうと `if(x[name] != ''){` の `if`条件が満たされなかった場合においても、出力の配列に何も追加されない**のではなく**、関数が明示的なreturnで終了しなかった場合の返り値としての **undefined が追加されます**
4
4
 
5
5
  ご質問のような、「配列から、ある条件を満たす要素だけを抽出して、新たな配列を作る」という場合、mapではなく、[filter](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) を使うとよいでしょう。filterを使うと、extArrayByNameは以下のように書けます。
6
6