我想从初始数组中删除与这些参数具有相同值的所有元素。
例如:
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
数组)传递给过滤函数,以便它知道要过滤掉什么......我怎么会这样做?此?
答案 0 :(得分:4)
尝试数组的包含功能。如果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)
答案 1 :(得分:3)
const destroyer = (arr, ...nopes) =>
arr.filter(value => !nopes.includes(value))
destroyer([1, 2, 3, 1, 2, 3], 2, 3)
因为很难理解类型签名,所以我不愿意使用可变参数函数,而是支持像这样的显式数组。对于部分应用或currying,翻转参数顺序也会更好。
//: ( 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])
答案 2 :(得分:0)
使用Array#indexOf
检查参数
shops__item
答案 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))