通过参数过滤参数,为什么这不起作用?

时间:2018-03-01 20:02:08

标签: javascript

我想从arguments中传递的array中删除destroyerarguments传递给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...??

select regexp_extract(concat("columna2=blablablatest",'\073'),'.*a2=?(.*?)\073',1);

3 个答案:

答案 0 :(得分:2)

.filter回调要求您return过滤结果中的内容。

来自 MDN

  

返回值

     

包含通过测试的元素的新数组。如果不   元素通过测试,将返回一个空数组。

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];
                }
            }
        }
        // You have to return something in the filter callback
        return arr;
    }

    return arr.filter(checkArgs);
}

//remove 2nd, 3rd, etc arguments from first argument
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));
console.log(destroyer([1, 2, 3, 1, 2, 3], 3));

答案 1 :(得分:0)

.filter需要return值作为过滤值。此外argumnents还包含位置array arr的{​​{1}},因此您必须从位置0开始。

1

答案 2 :(得分:-1)

这是过滤器的略微简化版本。还有其他方法可以优化它。假设基于0的索引。

&#13;
&#13;
function destroyer(arr) {
    var args = Array.prototype.slice.call(arguments); // turns arguments into arrays

    return args[0].filter(function(item, index) {    	
       return args.indexOf(index) < 0;
    });
}

//remove 2nd, 3rd, etc arguments from first argument
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));
&#13;
&#13;
&#13;