我刚开始在Freecodecamp.com上学习Javascript,我遇到了Seek and Destroy Challenge的问题。这就是问题所在:
寻求并摧毁
您将获得一个初始数组(第一个 驱逐舰功能中的参数),后跟一个或多个 参数。从初始数组中删除所有元素 与这些论点具有相同的价值。
这些是代码应该通过的测试:
destroyer([1, 2, 3, 1, 2, 3], 2, 3)
应该返回[1, 1]
。
destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3)
应该返回[1, 5, 1]
。
destroyer([3, 5, 1, 2, 2], 2, 3, 5)
应该返回[1]
。
destroyer([2, 3, 2, 3], 2, 3)
应该返回[]
。
destroyer(["tree", "hamburger", 53], "tree", 53)
应该返回["hamburger"]
。
由于我无法独自解决挑战,我在FreeCodeCamp wiki进行了研究以找到解决方案:
function destroyer(arr) {
var args = Array.prototype.slice.call(arguments);
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < args.length; j++) {
if (arr[i] === args[j]) {
delete arr[i];
}
}
}
return arr.filter(Boolean);
}
我得到布尔对象用作filter
方法的参数,以消除由delete
引起的数组中的空白点。但是,我在这里不明白的是,如果布尔对象不是函数,它的工作原理 - .filter()
方法需要函数作为参数,according to MDN。