141

私のコード

 var arr = ['a','b',1];
 var results = arr.map(function(item){
                if(typeof item ==='string'){return item;}  
               });

これにより、次の結果が得られます

["a","b",undefined]

undefined結果配列には入れたくありません。どうすればいいですか?

4

9 に答える 9

231

アイテムが文字列でない場合、何も返されません。その場合、関数はundefined、結果に表示されているものを返します。

マップ関数は、ある値を別の値にマップするために使用されますが、実際には配列をフィルタリングしたいようで、マップ関数は適していません。

実際に必要なのはフィルター関数です。結果の配列にアイテムが必要かどうかに基づいて、true または false を返す関数を取ります。

var arr = ['a','b',1];
var results = arr.filter(function(item){
    return typeof item ==='string';  
});
于 2013-04-16T12:28:11.807 に答える
19

ES6filterは (LINQ のような) 先のとがった矢印表記をサポートしているため:

したがって、次のワンライナーに要約できます。

['a','b',1].filter(item => typeof item ==='string');
于 2016-11-03T10:22:19.363 に答える
8

現在の要素が の場合にのみ、値を返しますstring。それ以外の場合は、おそらく空の文字列を割り当てるだけで十分です。

var arr = ['a','b',1];
var results = arr.map(function(item){
    return (typeof item ==='string') ? item : '';  
});

もちろん、文字列以外の要素をフィルタリングしたい場合は、 を使用しないでくださいmap()。むしろ、filter()関数の使用を検討する必要があります。

于 2013-04-16T12:29:43.187 に答える
6
var arr = ['a','b',1];
var results = arr.filter(function(item){
                if (typeof item ==='string') {return item;}  
               });
于 2013-04-16T12:30:46.820 に答える