2017-07-19 8 views
3

さて、配列が与えられた場合、問題は「偽」のすべての要素を削除することでした。 ブール値を引数として渡すことはどのように機能しますか?

この

は、私の解決策が言ったことだった(作品)問題:

function bouncer(arr) { 
    var trueArr = []; 
    for(i=0; i<arr.length; i++){ 
     if (arr[i]){ 
      trueArr.push(arr[i]); 
     } 
    } 
    return(trueArr); 
} 

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

これは動作し、テストに合格します。

function bouncer(arr) { 
    return arr.filter(Boolean); 
} 

私はこれがどのように動作するかを取得していない、まだブールANDフィルター上のMDNの記事を読んできました。しかし、ここで与えられた解決策ですか?ここで何が起こっているのですか? Booleanはコールバック関数ですか?もしそうなら、それはどのようにバックエンドで動作しますか?私はここに座って頭を傷つけるだけです。 filterから

+0

'Boolean'はそれをフィルタリングすることにより、あなたはすべてのfalseyを削除するので、truthy値に対して真とfalseyもののためにfalseを返す関数が –

+0

はそれが値ので、ブール値を作成し、コンストラクタですarr(array)のすべての要素を渡されたブール値と比較し、渡された値と一致する要素の配列を返します。あなたは、ブール値でもないフィルターを使うことができます。 – brijrajsinh

+1

'[7、" ate "、" false、9] .filter(i => {Boolean Boolean(i)})私はブール値が真偽であるか偽であるかどうかをチェックすると思ったのですか?だから真実の価値をどうやって返すのだろうか?それは実際には、真実でない値を除外するとは言いませんか? – epascarello

答えて

1

Booleanオブジェクトはブール値のオブジェクトラッパーです。 Booleanを呼び出すと、実際にはパラメータ付きの関数(スニペットを参照)が呼び出されます。つまり、Array.filter()のコールバックで必要なものだけです。

new Boolean([value])は、パラメータに応じて、

と呼ばれ、返される値はtrueまたはfalseになります(スニペットを参照してください)。

console.log(Boolean); //Constructor 
 
console.log(Boolean(0)); //Falsy value 
 
console.log(Boolean("foo")); //Truthy value

+0

さて、これを取得しますが、どこからパラメータを取得しますか? たとえば、filterを呼び出すときに、通常のコールバックでは、次のようになります: 'arr.filter(function(x){});' "X"はテスト対象の配列項目のプレースホルダです。コールバック、どのような配列項目がテストされているのか、どうやってわかるのですか?この質問が意味をなさない場合、私はちょうどそれがどのように背中で働いているのか分かりません。これは次のように書かれています: 'arr.filter(function(Boolean)(x){});' xはテスト対象の配列の項目です。いいえ? –

+0

'arr.filter(Boolean)'は 'arr.filter(x => Boolean(x))'と同じです。 'x'は' filter'コールバックから来ます – Weedoze

+0

Ahhhh、それを手に入れました。本当にありがとう!それをクリアしました! –

2

コールバック 関数は、配列の各要素をテストするために、述部です。要素を維持するためには、trueを返し、そうでない場合はfalse Boolean

から

最初のパラメータとして渡された値がブール値に変換され

そうです。コールバックです。これは、trueまたはfalseを返す関数(JS言語に組み込まれている)です。これは、フィルタ関数が渡す関数に渡すことを期待するものです。 falseyパラメータが渡されたとき、またBoolean戻りfalse

function bouncer(arr) { 
    return arr.filter(function(arr) { 
    return Boolean(arr); 
    }); 
} 

+0

ありがとう!これは、ほとんどそれをクリアしました!私はちょうどそれが真実の価値を返す方法を理解できなかった。 もう1つの質問:この場合、配列内の要素をどのように循環させるのでしょうか?通常のシナリオでは、次のように入力します。 'arr.filter(function(x){})' 'x'は配列項目のプレースホルダですか?その場合、コールバックとしてブール値を呼び出すときに言及する必要はありませんか?このように: 'arr.filter(function(Boolean(x){});' –

+0

@firefiber - "配列の要素をどのように循環させるのですか?" - これは 'filter'の動作です。あなたはそれを別の関数でラップする必要があるのですか? – Quentin

0
function bouncer(arr) { 
    return arr.filter(Boolean); 
} 

上記のコードは同等です。その結果、それらは除外されます。

関連する問題