[英]Deleting falsy values from an array
我在 freeCodeCamp 學習,目前正在學習基本算法。 我正在做虛假的保鏢練習,您需要從數組中刪除所有虛假的值。 遺憾的是,該任務只有高級答案,即使用 filter() 方法。 我決定做一個基本的,但目前卡住了。
function bouncer(arr) {
//*loops through array*
for (let i = 0; i < arr.length; i++) {
// *if there is a value that is falsy, delete that value from the array*
if (arr[i] == 0 || arr[i] == NaN || arr[i] == null || arr[i] == false || arr[i] == "" || arr[i] == undefined) {
delete arr[i];
}
}
return arr;
}
console.log(bouncer([7, "ate", "", false, 9]));
它返回:
7,吃,,,9。
該函數確實刪除了虛假值,但我留下了這三個句點(,,,)。 有沒有辦法讓這個函數更正確地工作,並在不失去函數的簡單性的情況下返回沒有這些句點的真值? 感謝你的幫助。
delete
僅適用於對象。 filter
會做你想要的:
const arr = [7, "ate", "", false, 9]
console.log(arr.filter(x => x))
filter
只保留數組中函數返回 true 的那些元素 - 在這里我使用x => x
因為你只想要真實的元素
這會做
var m = arr.filter(Boolean);
由於您是 Javascript 的新手,並且您需要您的代碼在不同的解決方案之外工作,您可以這樣做
刪除delete arr[i];
並將其替換為arr.splice(i,1); i--;
arr.splice(i,1); i--;
這將刪除項目在i
個位置,1表示從1項i
個位置。 由於第i
個位置的元素被刪除,並且在那里有一個新元素。 我們需要從那里再次繼續。 所以我們需要添加i--
。 否則在下一次迭代中,它將從下一個元素而不是第i
個位置開始。
function bouncer(arr) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] == 0 || Number.isNaN(arr[i]) || arr[i] == null || arr[i] == false || arr[i] == "" || arr[i] == undefined) {
arr.splice(i, 1);
i--;
}
}
return arr;
}
console.log(bouncer([7, NaN, "ate", "", false, 9]));
Delete
僅適用於Object
。
簡單地你可以這樣做,因為你願意使用簡單的 for 循環
function bouncer(arr) { let op =[]; for (let i = 0; i < arr.length; i++) { if(arr[i]){ op.push(arr[i]); } } return op; } console.log(bouncer([7, "ate", "", false, 9]));
使用map
方法和Boolean()
進行比較。
const bouncer = arr => {
let newArr = [];
arr.map(e => {
if (Boolean(e) == true) {
newArr.push(e)
}
});
return newArr;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.