Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过参数筛选参数,为什么这不起作用?_Javascript - Fatal编程技术网

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,但我决定坚持这个问题,为什么代码不起作用。