我想从初始数组中删除与这些参数具有相同值的所有元素。
前任:
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))