2017-02-24 13 views
-1

私はFreeCodeCamp "Falsy Bouncer"チャレンジを行っています。私は配列からすべての偽の値を取り除かなければならない。私はすでにブールをフィルタリングするのが最も簡単な解決策であることを知っていますが、この方法で問題を解決できるかどうかは疑問です。関数の引数として渡された配列のarray.filter()メソッドの使用

私はarr.filter()メソッドを別のWebサイトで検索しましたが、それらの例では、配列を持つ変数が関数の前にあります。私の場合、私が操作しなければならない配列は、関数の引数として来ます。だから私は本当にこの行をどこに置くのか分からない:var result = arr.filter(bouncer)。関数の外側にある場合は、arr is not definedを返します。関数に入ると-を返します。ここで

は私のコードです:

function bouncer(arr) { 
    // Where do I put this line? 
    var result = arr.filter(bouncer); 
    return arr !== false, null, 0, NaN, undefined,""; 
    } 

    bouncer([7, "ate", "", false, 9]); 

、どのように配列を関数の引数として与えられた場合に使用array.filter()メソッドのですか?

+1

引数*は単なる変数です。 'var result = arr.filter(bouncer);'は閉じていますが、 'bouncer'関数を渡すべきではありません。終了することのない再帰的ループを作成しています。 – Brennan

+0

' 'ate ' '結果配列内にあるか、数字だけを保持したいのですか? –

+0

はい、私も "食べ残し"したいと思います。 false、null、0、 ""、undefined、およびNaNのような偽の要素をフィルタリングするだけです。 –

答えて

1

あなたはメソッドを間違って使用しています。カンマで区切られた複数のものをチェックすることはできません。

function bouncer(arr) { 
 
    return arr.filter(e => !!e); 
 
} 
 

 
var result = bouncer([7, "ate", "", false, 9, NaN]); 
 
console.log(result);
:あなたが欲しいものを行うための正しい方法は、あなたが bouncerあなたはフィルターの配列を返すために使う機能になりたい場合は、これを使用

function bouncer(arr) { 
 
    return arr.filter(v => !!v); 
 
} 
 

 
console.log(bouncer([7, "ate", "", false, 9]))

+0

これは正しい@Andreasではありません。isNaNチェックは対象外です。 "ate"は配列に残ります。しかし、私はあなたが答えで編集したものにそれを簡略化することに同意する – baao

+1

なぜ "食べる"を削除する必要がありますか? "比較"部分の値はすべて[偽値](https://developer.mozilla.org/de/docs/Glossary/Falsy)です。 'NaN'の部分にそれ以上の定義がない限り、私は' isNaN() 'チェックの理由を見ないので、ibrahimsの解決策になります。 – Andreas

+0

@Andreasはチャレンジの説明を読んだ後、私はあなたが正しいことを認めます。 – baao

1

だろう

bouncerは、これを使用し、あなたがfilterに渡すコールバックを可能にする:

function bouncer(elem) { 
 
    return !!elem; 
 
} 
 

 
var result = [7, "ate", "", false, 9, NaN].filter(bouncer); 
 
console.log(result);

注:!!someVariableは暗黙のうちにそれと同等のブール値にsomeVariableを変換します。

+0

あなたのフィルタはNaNのものを許可します – baao

+0

@baaoそうではありません! –

+0

実行コードスニペットをクリックし、結果の配列で "ate"を見てください。 NaN以外は何ですか? – baao

関連する問題