我有一个函数,它接受一个数组和更多的参数,如下所示: 函数 arrayandmore([1, 2, 3], 2, 3) 我需要返回数组 ([1, 2, 3]),但不包含那些等于数组后面的参数的元素。所以在这种情况下,返回的数组将是: ([1]).
我的方法之一是:
function destroyer(arr) {
var args = Array.from(arguments);
var i = 0;
while (i < args.length) {
var result = args[0].filter(word => word !== args[i]);
i++;
}
console.log(result);
}
destroyer([1, 1, 3, 4], 1, 3);
控制台返回:
[ 1, 1, 4 ]
我不明白,为什么它也返回一个 - 我不明白,为什么它不起作用。
使用splice也是一样
function destroyer(arr) {
var args = Array.from(arguments);
var quant = args.length - 1;
for (var i = 1; i <= quant; i++) {
if (arr.indexOf(args[i]) !== -1) {
arr = arr.splice(arr.indexOf(args[i]));
}
console.log(arr);
}
}
destroyer([1, 1, 3, 4], 1, 3);
我认为,这两种方式都应该可行。但我不明白他们为什么不这样做。
最佳答案
您的 while
将不起作用,因为 result
在每个循环中都被覆盖。因此,它只会删除 destroyer
函数的最后一个参数
您可以使用 rest parameter syntax分隔数组和要删除的项目。
function destroyer(arr, ...toRemove) {
return arr.filter(a => !toRemove.includes(a))
}
console.log(destroyer([1, 1, 3, 4, 5], 1, 3))
关于javascript - 将数组和更多参数传递给函数。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54516295/