2017-01-23 6 views
1

を更新していないタスクは次のとおりです。がArray.Filter配列

あなたは1つ以上の引数が続く最初の配列( 駆逐艦関数の最初の引数)で提供されます。最初の配列から の要素をすべて取り除きます。これらの要素は、 引数と同じ値です。

それを介して作業している間、私は私が理解するのに苦労していますいくつかのArray.filter行動が見つかりました:ここ

function destroyer(arr) { 
    for (var i = 1; i<arguments.length; i++){ 
    toDelete = arguments[i]; 
    arr.filter(isItIn); 
    } 
    return arr; 
} 

function isItIn(item, undefined, array){ 
    return item!=toDelete; 
} 

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

私の意図は、arr.filterたびに呼び出し、引数の項目1+を反復処理することでした。 Arr.filterは、isItInと呼ばれ、現在調べているアイテムが探しているアイテムかどうかを確認します。ただし、arrは変更されずに返されます。私はisItInを変更する場合:テストする

function isItIn(item, undefined, array){ 
    return item==1; 
} 

、それはしかし、isItInのオリジナル書面でconsole.log sが、それは正しく引数を受信して​​いることを示している(または、これまで私が決定すると考えられてきたように、まだ変更されていません少なくとも。

私は問題を解決するには、私の最初のコードが間違っていた場所の単なる説明を探していないよ、別のルートを通じて問題を解決してきた、注意してください。

答えて

4

基本的にあなたがArray#filterを使用その結果を省略します。

filterの結果を前の配列に代入する必要があります。

arr = arr.filter(isItIn); 

function destroyer(arr) { 
 
    for (var i = 1; i < arguments.length; i++) { 
 
     toDelete = arguments[i]; 
 
     arr = arr.filter(isItIn); 
 
    } 
 
    return arr; 
 
} 
 

 
function isItIn(item) { 
 
    return item != toDelete; 
 
} 
 

 
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));

+1

私のああ...あなたは私がそれを見つめてきたどのくらいの任意のアイデアを持っていた場合、 – MrB

0

あなたが返された配列を割り当てる必要があり:

function destroyer(arr) { 
    for (var i = 1; i<arguments.length; i++) { 
     toDelete = arguments[i]; 
     arr = arr.filter(isItIn); 
    } 
    return arr; 
}