簡體   English   中英

從數組中刪除假值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM