繁体   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