4 回答

TA贡献1866条经验 获得超5个赞
您的代码中的问题是您正在进行一个循环,removeFromArray但您没有循环通过您的数组来检查数组中的每个元素是否与 removefromarray 您必须使用嵌套循环
removeFromArray = function(array, ...args) {
let removalItems = Array.from(args);
for (i = 0; i < array.length; i++) {
for (j = 0; j < removalItems.length; j++) {
if (array[i] === removalItems[j]) {
array.splice(i, 1);
i--
}
else continue
}
}
return array
}
console.log(removeFromArray([1, 2, 3, 4], 3, 2))
另一种方法是使用过滤器
removeFromArray = function(array, ...args) {
let removalItems = Array.from(args);
return array.filter(x=>!removalItems.some(y=>x==y))
}
console.log(removeFromArray([1, 2, 3, 4], 3, 2));

TA贡献1835条经验 获得超7个赞
使用filter()会简化这一点并且不会改变原始数组
const removeFromArray = (array, ...args) => {
let removalItems = new Set(args);
return array.filter(e => !removalItems.has(e));
}
console.log(removeFromArray([1, 2, 3, 4], 3, 2))

TA贡献1831条经验 获得超4个赞
您几乎没有错误,如果它们不在同一位置,并且当您删除带有 slice 的项目时,您需要递减 i 否则您将跳过项目
const removeFromArray = (array, ...removalItems) => {
for (i = 0; i < array.length; i++) {
if (removalItems.includes(array[i])) {
array.splice(i, 1);
i--;
}
}
return array;
}
但是过滤器更干净
const removeFromArray = (array, ...removalItems) => array.filter(x => !removalItems.includes(x))

TA贡献1799条经验 获得超6个赞
您将数组视为具有单个对象。
遍历数组并使用包含方法检查该元素是否存在于removingItems 数组中。如果是 splice ,则增加。
removeFromArray = function(array, ...args) {
let removalItems = Array.from(args);
for (i = 0; i < array.length; i++) {
if (removalItems.includes(array[i])) {
array.splice(i, 1);
i--;
}
}
// console.log(array);
return array;
}
console.log(removeFromArray([1, 2, 3, 4], 3, 2));
这是另一种解决方案,在迭代时不拼接数组。
removeFromArray = function(array, ...args) {
let removalItems = Array.from(args);
let result = [];
for (i = 0; i < array.length; i++) {
if (!removalItems.includes(array[i])) {
result.push(array[i]);
}
}
// console.log(array);
return result;
}
console.log(removeFromArray([1, 2, 3, 4], 3, 2));
添加回答
举报