destroyer(array1, some arguments) 函式應該回傳不包括引數的 array1。我找到了一些作業方法,return arr = arr.filter(val => !rem.includes(val));但我需要修復此代碼并找出此代碼給出錯誤結果的原因。應該是 [1]
function destroyer(arr, ...rem) {
for(let i = 0; i < arr.length; i ) {
if (rem.includes(arr[i])) {
arr.splice(i, 1);
};
};
return arr;
}
console.log(destroyer([3, 5, 1, 2, 2], 2, 3, 5));
uj5u.com熱心網友回復:
function destroyer(arr, ...rem) {
const itemsToRemove = new Set(rem);
return arr.reduce((acc, curr) => itemsToRemove.has(curr) ? acc : [...acc, curr] ,[])
}
console.log(destroyer([3, 5, 1, 2, 2], 2, 3, 5));
uj5u.com熱心網友回復:
或者你可以這樣做:
const destroyer=(arr, ...rem)=>arr.filter(v=>!rem.includes(v));
console.log(destroyer([3, 5, 1, 2, 2], 2, 3, 5));
uj5u.com熱心網友回復:
問題是Array.prototype.splicefor回圈中函式的呼叫,這個函式在改變陣列,基本上影響了陣列的索引,因此當前索引i不再有效。
要解決這個問題,您可以向后回圈,這樣我們可以改變陣列,并且當前索引不受影響。
還有一件事,您的方法是改變陣列,更好的方法是將函式Array.prototype.filter與函式一起使用Array.prototype.includes,請參閱其他答案。
function destroyer(arr, ...rem) {
for(let i = arr.length; i >= 0; i--) {
if (rem.includes(arr[i])) {
arr.splice(i, 1);
};
};
return arr;
}
console.log(destroyer([3, 5, 1, 2, 2], 2, 3, 5));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/496774.html
標籤:javascript 数组 排序
上一篇:為什么使用選項注冊斜線命令不起作用(discord.js)
下一篇:bs4腳本不回傳錯誤但不執行代碼
