从数组中删除虚假值

时间:2018-12-24 20:33:07

标签: javascript arrays algorithm loops boolean

我正在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,ate ,,, 9。

该函数确实删除了伪造的值,但是剩下这三个句点(,,,)。有没有一种方法可以使此函数更正确地工作,并在不损失那些句号的情况下返回真实值,而又不会失去函数的简单性呢? 感谢您的帮助。

5 个答案:

答案 0 :(得分:3)

delete仅适用于对象。 filter将做您想要的事情:

const arr = [7, "ate", "", false, 9]

console.log(arr.filter(x => x))

filter仅保留该函数为其返回true的数组中的那些元素-在这里我使用x => x因为您只需要真实的元素

答案 1 :(得分:2)

由于您是Java语言的新手,除了其他解决方案之外,您还需要其他代码才能工作,因此可以这样做

删除delete arr[i];并替换为arr.splice(i,1); i--;

这将删除第i位的项目,“ 1”表示第i位的项目为1。 由于位于第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]));

答案 2 :(得分:2)

可以做到

var m = arr.filter(Boolean);

答案 3 :(得分:1)

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]));

答案 4 :(得分:0)

使用了map方法和Boolean()进行比较。

const bouncer = arr => {

    let newArr = [];

    arr.map(e => {
        if (Boolean(e) == true) {
            newArr.push(e)
        }
    });


    return newArr;
}