2017-12-20 37 views
1

私は、提供された配列から要素を削除する関数を作成するFreeCodeCampチャレンジ「探索と破棄」を行っています。配列内の配列をフィルタリングする

は、私は私それが直感的だったので、私は仕事に取り組んでいたソリューションを作ることができれば、私は様々なソリューションを見てきたが、結果は

[1, 1] 

する必要があり、私は望んでいた

function destroyer(arr) { 
// Remove all the values 
destroyer([1, 2, 3, 1, 2, 3], 2, 3); 

を考えますうまくいけば、私はフィルタリングのより良い理解につながるでしょう。私は、私のソリューションがうまくいかない理由は、私がこのメソッドを適切に使用していないためだと思う。

function destroyer(arr) { 
// Remove all the values 
var args = Array.prototype.slice.call(arguments); 
//makes the arguments an array 

function destroy(value) { 


for (var i=1; i < args.length; i++) 
return value !==args[i]; 
// creates a loop that filters all arguments after the first one and removes from the initial argument, regardless of how many there are. 

} 

var filtered = arr.filter(destroy); 
return arr[0]; 
} 


destroyer([1, 2, 3, 1, 2, 3], 2, 3); 

が、私は最初の引数を最初の3つの引数がフィルタリングされているので、

var filtered = arr.filter(destroy); 

が問題の可能性があることに気づいたが、ない:

filter(); 

とにかく、ここで私の試みです。しかし、私がやってみたら

var filtered = arr [0] .filter(破壊); 最初の引数を対象としていたと思いますが、エラーがスローされます。 この方法で問題を解決することは可能ですか?

function badValues(val){ 
return val !== 2; 
} 

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

bouncer([1, null, NaN, 2, undefined]); 

し、除去する必要がある引数に2を代用したい:私は、次の機能が設定され道を好きなので、私は、このようにそれをやってみたかったです。

ありがとうございました!

+0

おそらくこのようなものですか? 'function destroyer(){ let args = Array.from(arguments);次のようにします。 let array = args [0]; args.shift(); return array.filter(e =>!args.includes(e)) } ' – Brian

+0

あなたの' destroyer() '関数は引数を1つしか取っていませんが、あなたは3つを渡しています。 –

+0

実装にはいくつかの問題があります。たとえば、 'destroy'関数は1回目の反復で返します。 'find'、' filter'のようなjavascriptの組み込み関数について学んでください...あなたのコードをより洗練された、賢く、より読みやすくします。 – RaphaMex

答えて

0

Thisは実際に解を発見したい場合は読んではいけませんが、実際にこの問題を解決して学習するにはreadの方法が必要です。filterが必要です。あなたは近くにいる。

function destroyer(arr) { 
    var args = Array.prototype.slice.call(arguments); 

    var filtered = arr.filter(destroy); 

    // you must return the filtered array 
    return filtered; 

    function destroy(value) {  
    for (var i=1; i < args.length; i++){ 

     // you must return false if you find it so filter removes the value 
     if (value === args[i]) return false; 
    } 

    // if you loop through all and don't find it, return true so filter keeps the value 
    return true; 
    } 
} 

destroyer([1, 2, 3, 1, 2, 3], 2, 3); 
+0

ありがとうございます!フィルターの仕組みを読んでみましたが、理解するのは難しかったです。私は特に似たような問題のため、混乱しています。 function badValues(val){ return val!== false && val!== null && val!== 0 && val!== "" && val !== undefined &&!Number.isNaN(val); } ファンクションバウンサー(arr){ return arr.filter(badValues); } バウンサー([1、null、NaN、2、undefined]);この関数はtrueとfalseを使用せずに値を削除します。 – mso4491

+0

実際にはブーリアンがその解決策に関係しています。あなたが "!== "比較演算子を使用している場合、その演算子を含むすべての文はブール値を返します。[演算子](https://www.w3schools.com/jsref/jsref_operators.asp)。 – agustin37

関連する問題