私のコード
var arr = ['a','b',1];
var results = arr.map(function(item){
if(typeof item ==='string'){return item;}
});
これにより、次の結果が得られます
["a","b",undefined]
undefined
結果配列には入れたくありません。どうすればいいですか?
私のコード
var arr = ['a','b',1];
var results = arr.map(function(item){
if(typeof item ==='string'){return item;}
});
これにより、次の結果が得られます
["a","b",undefined]
undefined
結果配列には入れたくありません。どうすればいいですか?
アイテムが文字列でない場合、何も返されません。その場合、関数はundefined
、結果に表示されているものを返します。
マップ関数は、ある値を別の値にマップするために使用されますが、実際には配列をフィルタリングしたいようで、マップ関数は適していません。
実際に必要なのはフィルター関数です。結果の配列にアイテムが必要かどうかに基づいて、true または false を返す関数を取ります。
var arr = ['a','b',1];
var results = arr.filter(function(item){
return typeof item ==='string';
});
ES6filter
は (LINQ のような) 先のとがった矢印表記をサポートしているため:
したがって、次のワンライナーに要約できます。
['a','b',1].filter(item => typeof item ==='string');
現在の要素が の場合にのみ、値を返しますstring
。それ以外の場合は、おそらく空の文字列を割り当てるだけで十分です。
var arr = ['a','b',1];
var results = arr.map(function(item){
return (typeof item ==='string') ? item : '';
});
もちろん、文字列以外の要素をフィルタリングしたい場合は、 を使用しないでくださいmap()
。むしろ、filter()
関数の使用を検討する必要があります。
var arr = ['a','b',1];
var results = arr.filter(function(item){
if (typeof item ==='string') {return item;}
});