2017-02-04 16 views
1

これらの引数と同じ値を持つすべての要素を初期配列から削除します。Javascriptはフィルタ関数に引数を渡しますか?

例:

destroyer([1, 2, 3, 1, 2, 3], 2, 3) should return [1, 1]. 
destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3) should return [1, 5, 1]. 

ここに私のコードです:

function takeaway(value) { 

    return ?? 
} 


function destroyer(arr) { 
    // Remove all the values\ 
    var args = Array.from(arguments); // args = [[1,2,3,1,2,3],2,3] 

    var arr1 = args.shift();   // arr1 = [1, 2, 3, 1, 2, 3] 
             // args = [2,3] 

    var filtered = arr1.filter(takeaway); 


    return filtered; 

} 

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

私は間違っていない場合、私は私が(args配列)を取り出したい要素を渡す必要があり、フィルタにどのようにフィルタリングするのかを知っています...私はこれをどのように伴いますか?

答えて

2
const destroyer = (arr, ...nopes) => 
    arr.filter(value => !nopes.includes(value)) 

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

それは型シグネチャを理解することは困難なので、私は離れて、このような明示的な配列に賛成しているが可変長引数の関数を使用してから恥ずかしがり屋と思います。引数の順序を反転することは、部分的なアプリケーションやカレー化の方が良いでしょう。

//: (Array Int, Array Int) -> Array Int 
const destroyer = (nopes, arr) => 
    arr.filter(value => !nopes.includes(value)) 

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

配列のインクルード機能を試してください。 arr1要素がargs配列に含まれていない場合はfalseを返し、trueを返す要素だけが除外されます。

function destroyer(arr) { 
    // Remove all the values\ 
    var args = Array.from(arguments); // args = [[1,2,3,1,2,3],2,3] 

    var arr1 = args.shift();   // arr1 = [1, 2, 3, 1, 2, 3] 
             // args = [2,3] 

    var filtered = arr1.filter(function(value){ 
    return !args.includes(value); 
}); 


    return filtered; 

} 

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

使用Array#indexOf要素は、これは説明のビットと私の解決策である引数

const destroyer = (arr, ...args) => arr.filter(value => args.indexOf(value) === -1); 
destroyer([1, 2, 3, 1, 2, 3], 2, 3); 
destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3); 
0

に存在するかどうかをチェックします。それは微妙な違いを持つ他のものに似ています。これは、コールバック関数が何をしているかをより詳細に示しています。誰もが理解できるようになることを願っています!

let arr = [1, 2, 3, 3, 4, 5] 

    function destroyer(myArray) { 
     let argsArr = Array.from(arguments)    //argsArr = [[1,2,3,3,4,5],3,4] 
     let sliced = argsArr.slice.call(arguments, 1) //sliced = [3,4] 
                 //myArray = [1,2,3,3,4,5] 
     function takeAway(val) {      // val = each element in myArray:1,2,3,3,4,5 
      return sliced.indexOf(val) === -1   //[3,4] indexOf 3,4 = true (+1) [3,4] indexOf 1,2,5 
                 // == false (-1) so it is returned by the filter method 
     } 
     let answer = myArray.filter(takeAway)   // answer = [1,2,5] 
     return answer 
    } 

    console.log(destroyer(arr, 3, 4)) 
関連する問題