我想撰寫一個函式,它傳遞一個陣列和一個可選數量的值作為引數從陣列中洗掉。我的函式在只有 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;
};
uj5u.com熱心網友回復:
您可以使用以下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) )
提示:盡量避免改變原始陣列并在這些操作期間處理或回傳副本。
uj5u.com熱心網友回復:
問題在于您的索引,您正在使用 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))
}
我這樣寫是為了純粹維護你的功能。
uj5u.com熱心網友回復:
問題是因為您在從該陣列回圈時從陣列中洗掉了專案。
每次你的 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))
uj5u.com熱心網友回復:
我建議使用陣列作為第二個引數。
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));
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/446416.html
標籤:javascript 算法 逻辑
