如何从数组中删除多个元素?
How do I remove multiple elements from an array?
我想编写一个函数,它传递一个数组和一个可选数量的值作为参数从数组中删除。我的函数在只有 1 个值时有效,但在有多个值时失败。
const removeFromArray = function (arr, ...theArgs) {
for (let i = 0; i < arr.length; i++) {
if (theArgs.includes(arr[i])) {
arr.splice(i, 1);
}
}
return arr;
};
您可以使用 filter
方法:
const removeFromArray = function (arr, ...theArgs) {
return arr.filter( val => !theArgs.includes(val) )
};
const list = [1,2,3];
const newList = removeFromArray(list, 2,3);
console.log(newList);
还有一个更简洁的版本:
const removeFromArray = (arr, ...args)=> arr.filter( val => !args.includes(val) )
提示:尽量避免改变原始数组,并在这些操作期间处理或return副本。
问题出在你的索引上,你正在使用 arr 的索引查找元素,并在数组中删除,这可能导致循环中的索引出现问题。
修改你的代码如下
const removeFromArray = function (arr, ...theArgs) {
for (let i = 0; i < theArgs.length; i++) {
if (arr.includes(theArgs[i])) {
arr.splice(arr.indexOf(theArgs[i]), 1);
}
}
return arr;
};
上面按您的方式修复了代码,但更好的方法是使用过滤器。
const removeFromArray = function (arr, ...theArgs) {
return arr.filter(ele => !theArgs.includes(ele))
}
我这样写纯粹是为了维护你的功能
问题是因为您在从该数组循环时从数组中删除了项目。
每次你的for循环迭代数组,它都会得到一个新数组
例如(1,2,3,4,5 => 2,3,4,5), 但 i 值一直增加 1.
const removeFromArray = function (arr, ...theArgs) {
for (let i = 0; i < arr.length; i++) {
console.log(`arr:${arr}`,`item${arr[i]}`,`num${i}`)
console.log(arr[i])
if (theArgs.includes(arr[i])) {
arr.splice(i, 1);
}
}
return arr;
};
const testarray = [1,2,3,4,5]
console.log(removeFromArray(testarray,1,2,3))
我建议使用数组作为第二个参数。
var array1 = ['a','b','c'];
var elementsToRemove = ['a','b'];
const removeFromArray = function (array1, elementsToRemove) {
var filtered = array1.filter(function(value, index, array){
return elementsToRemove.includes(value);
});
return filtered;
}
console.log(removeFromArray(array1,elementsToRemove));
我想编写一个函数,它传递一个数组和一个可选数量的值作为参数从数组中删除。我的函数在只有 1 个值时有效,但在有多个值时失败。
const removeFromArray = function (arr, ...theArgs) {
for (let i = 0; i < arr.length; i++) {
if (theArgs.includes(arr[i])) {
arr.splice(i, 1);
}
}
return arr;
};
您可以使用 filter
方法:
const removeFromArray = function (arr, ...theArgs) {
return arr.filter( val => !theArgs.includes(val) )
};
const list = [1,2,3];
const newList = removeFromArray(list, 2,3);
console.log(newList);
还有一个更简洁的版本:
const removeFromArray = (arr, ...args)=> arr.filter( val => !args.includes(val) )
提示:尽量避免改变原始数组,并在这些操作期间处理或return副本。
问题出在你的索引上,你正在使用 arr 的索引查找元素,并在数组中删除,这可能导致循环中的索引出现问题。 修改你的代码如下
const removeFromArray = function (arr, ...theArgs) {
for (let i = 0; i < theArgs.length; i++) {
if (arr.includes(theArgs[i])) {
arr.splice(arr.indexOf(theArgs[i]), 1);
}
}
return arr;
};
上面按您的方式修复了代码,但更好的方法是使用过滤器。
const removeFromArray = function (arr, ...theArgs) {
return arr.filter(ele => !theArgs.includes(ele))
}
我这样写纯粹是为了维护你的功能
问题是因为您在从该数组循环时从数组中删除了项目。
每次你的for循环迭代数组,它都会得到一个新数组
例如(1,2,3,4,5 => 2,3,4,5), 但 i 值一直增加 1.
const removeFromArray = function (arr, ...theArgs) {
for (let i = 0; i < arr.length; i++) {
console.log(`arr:${arr}`,`item${arr[i]}`,`num${i}`)
console.log(arr[i])
if (theArgs.includes(arr[i])) {
arr.splice(i, 1);
}
}
return arr;
};
const testarray = [1,2,3,4,5]
console.log(removeFromArray(testarray,1,2,3))
我建议使用数组作为第二个参数。
var array1 = ['a','b','c'];
var elementsToRemove = ['a','b'];
const removeFromArray = function (array1, elementsToRemove) {
var filtered = array1.filter(function(value, index, array){
return elementsToRemove.includes(value);
});
return filtered;
}
console.log(removeFromArray(array1,elementsToRemove));