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数组(传递到过滤器函数中,以便它知道要过滤掉什么......我该如何配合呢?

尝试数组的包含函数。如果 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)
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])

使用 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);
这是我

的解决方案,并做了一些解释。它与其他产品相似,但存在细微差异。它更详细地显示了回调函数的作用。希望它有助于大家理解它!

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))

最新更新