我有一个程序应该从参数列表中删除项目
function destroyer(arr) {
var args = [].slice.call(arr);
var data = args.shift();
for(var i = 0; i < args.length; i++){
var j = 0;
while(j < data.length){
if(args[i] == data[j]){
data.splice(j,1);
j = 0;
}
else{
j += 1;
}
}
}
return data;
}
驱逐舰([1,2,3,1,2,3],2,3)应该返回[1,1]但我只得到1的响应,我不知道为什么因为当我在循环外执行指令时,我得到了数组。
更新:应该是这样的。
function destroyer(arr) {
var args = [].slice.call(arguments);
var data = args[0];
args.shift();
for(var i = 0; i < args.length; i++){
var j = 0;
while(j < data.length){
if(args[i] == data[j]){
data.splice(j,1);
j = 0;
}
else{
j += 1;
}
}
}
// Remove all the values
return data;
}
答案 0 :(得分:0)
作为替代方案,您可以使用spread syntax来删除要删除的元素数组,并使用Array.prototype.filter来过滤掉这些元素,例如
function destroyer(arr, ...args) {
return arr.filter(e => !args.includes(e));
}
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3)); // [1, 1]
答案 1 :(得分:0)
您应该使用spread syntax表示会有更多参数
function destroyer(...arr) {
var args = [].slice.call(arr);
var data = args.shift();
for(var i = 0; i < args.length; i++){
var j = 0;
while(j < data.length){
if(args[i] == data[j]){
data.splice(j,1);
j = 0;
}
else{
j += 1;
}
}
}
return data;
}
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));
答案 2 :(得分:0)
function destroyer(array) {
var pos, args = [].slice.call(arguments, 1),
arrLength = array.length,
newArray = [];
while ((arrLength -= 1) >= 0) {
pos = args.lastIndexOf(array[arrLength]);
if (!~pos) {
newArray.unshift(array[arrLength]);
}
}
return newArray;
};
console.log(destroyer([1,2,3,1,2,3], 2, 3));
console.log(destroyer([1,2,3,1,2,3], 1, 3));
console.log(destroyer([1,2,3,1,2,3], 1, 2));
console.log(destroyer([1,2,3,1,2,3], 1, 2, 3));
console.log(destroyer([1,2,3,1,2,3], 4));