我有一个函数,该函数需要一个数组和其他类似的参数: 函数 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 ]
我不明白,为什么它也返回一个-我不明白,为什么它不起作用。
使用接头也是如此。
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);
我认为,两种方法都应该起作用。但是我不知道为什么他们不这么做。
答案 0 :(得分: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))