Javascript 通过参数筛选参数,为什么这不起作用?
我想从作为Javascript 通过参数筛选参数,为什么这不起作用?,javascript,Javascript,我想从作为参数传递的函数销毁程序中删除所有参数 function destroyer(arr) { var args = Array.prototype.slice.call(arguments); //turns arguments into arrays function checkArgs() { for (var i = 0; i < arr.length; i++) { for (var j = 0; j < ar
参数
传递的函数销毁程序
中删除所有参数
function destroyer(arr) {
var args = Array.prototype.slice.call(arguments); //turns arguments into arrays
function checkArgs() {
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(checkArgs);
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3); //Remove 2nd, 3rd, etc arguments from first argument...??
功能销毁程序(arr){
var args=Array.prototype.slice.call(参数);//将参数转换为数组
函数checkArgs(){
对于(变量i=0;i
过滤器
回调要求您返回过滤结果中应该包含的内容
从:
返回值
包含通过测试的元素的新数组。如果没有
元素通过测试,将返回一个空数组
功能销毁程序(arr){
var args=Array.prototype.slice.call(参数);//将参数转换为数组
函数checkArgs(){
对于(变量i=0;i 日志(驱逐舰([1,2,3,1,2,3,3])代码>这是一个稍微简化的过滤器版本。您还可以通过其他方式对此进行优化。这是假设一个基于0的索引
功能销毁程序(arr){
var args=Array.prototype.slice.call(参数);//将参数转换为数组
返回参数[0]。筛选器(函数(项,索引){
返回参数indexOf(index)<0;
});
}
//从第一个参数中删除第二个、第三个等参数
日志(驱逐舰([1,2,3,1,2,3],2,3))
过滤器.filter
需要一个返回值作为过滤值。而且arguments
还包含数组arr
在0
位置,因此必须从1
位置开始
function destroyer(arr) {
var args = Array.prototype.slice.call(arguments); //turns arguments into arrays
function checkArgs() {
for (var i = 0; i < arr.length; i++) {
for (var j = 1; j < args.length; j++) {
if (arr[i] == args[j]) {
delete arr[i];
}
}
}
return arr;
}
return arr.filter(checkArgs);
}
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));
功能销毁程序(arr){
var args=Array.prototype.slice.call(参数);//将参数转换为数组
函数checkArgs(){
对于(变量i=0;i
为什么不var args=Array.from(参数)代码>?请注意,参数
包含函数的所有参数,包括arr
@connexo出于优化原因,从函数中传递参数
不是一个好主意。最好使用普通的for
循环执行复制。(也就是说,是的Array.from()
会更好。)请注意,从数组中删除通常不应该同时使用.filter()
和删除筛选器回调中的元素(将delete
应用于数组)。过滤器回调应该返回true
或false
,过滤数组的结果将是一个新数组。delete
无论如何都会打乱您的迭代,因为您总是增加i
。这提供了一个替代解决方案,但并没有回答实际问题。这是真的。我太专注于checkArgs()
函数了。另一个问题是代码正在使用filter()
,而filter回调正在删除元素本身。这真的毫无意义。@Pointy-True,但我决定坚持这个问题,为什么代码不起作用。