【发布时间】:2018-06-02 12:48:33
【问题描述】:
我正在做一个 FreeCodeCamp 挑战,“寻找并销毁”,我在其中创建了一个从提供的数组中删除元素的函数。
给定
function destroyer(arr) {
// Remove all the values
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
结果应该是
[1, 1]
虽然我已经看到了各种解决方案,但我希望能够使我一直在研究的解决方案能够发挥作用,因为它对我来说很直观,并且希望能引导我更好地理解过滤。我认为我的解决方案不起作用的原因是我没有正确使用该方法。
filter();
无论如何,这是我的尝试:
function destroyer(arr) {
// Remove all the values
var args = Array.prototype.slice.call(arguments);
//makes the arguments an array
function destroy(value) {
for (var i=1; i < args.length; i++)
return value !==args[i];
// creates a loop that filters all arguments after the first one and removes from the initial argument, regardless of how many there are.
}
var filtered = arr.filter(destroy);
return arr[0];
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
我注意到了
var filtered = arr.filter(destroy);
可能是问题,因为最初的三个参数被过滤了,但不是第一个参数。但是,如果我尝试这样做
var 过滤 = arr[0].filter(destroy); 我认为会针对第一个参数,抛出一个错误。 是否可以通过这种方式解决问题?我想这样做是因为我喜欢以下功能的设置方式:
function badValues(val){
return val !== 2;
}
function bouncer(arr) {
return arr.filter(badValues);
}
bouncer([1, null, NaN, 2, undefined]);
并且想用 2 代替需要删除的参数。
谢谢大家!
【问题讨论】:
-
可能是这样的?
function destroyer() { let args = Array.from(arguments); let array = args[0]; args.shift(); return array.filter(e => !args.includes(e)) } -
你的
destroyer()函数只接受一个参数,但你传递了三个参数。 -
您的实施存在几个问题。例如,您的
destroy函数在第一次迭代时返回。了解find、filter等 javascript 内置函数将使您的代码更简洁、更智能、更具可读性。
标签: javascript arrays filter arguments