javascript - 无法删除数组中的所有 Boolean == false

标签 javascript arrays boolean splice

<分区>

给定一个具有不同数据类型的数组。我编写了一个函数来查找那些 false 的值,并返回没有 falsy 值的数组。

例如:

[7, "ate", "", false, 9] should return [7, "ate", 9].

这是我当前的代码:

function bouncer(arr)
{
    for (var i = 0; i < arr.length; i++)
    {
        if (Boolean(arr[i]) == false)
        {
            arr.splice(i, 1);
        }
     }
     console.log(arr);
}

但是,有一个问题:

一.)

In case of Input: bouncer([7, "ate", "", false, 9])
It returns: [ 7, 'ate', false, 9 ]
But it should return: [7, "ate", 9]

二.)

In case of input: `bouncer([false, null, 0, NaN, undefined, ""]);`
It returns: [ null, NaN, '' ]
But it should return: []

我不明白为什么它会返回 boolean 假值,如 NaNnull。但它正确地拼接空字符串 ("") 或 undefined 等值。

而且我也不明白,为什么在第一种情况下它返回 false(这不是故意的),但在第二种情况下它不返回 false .

非常感谢您的澄清。

最佳答案

正如其他人所说,您可以为此目的使用 filter()。最短的方法是:

const array = [false, null, true, 0, NaN, undefined, "", "Hola Mundo"];
console.log(array.filter(Boolean));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

但是,回到您的代码,您应该注意 splice() 方法在检测到 falsy 值时会更改数组(因为删除了一个元素)。换句话说,arr.length 在循环执行时动态减小,但 i 变量保持递增。这会导致循环实际上不会循环数组中的所有元素。要解决此问题,您必须在从数组中删除元素时减小变量 i 的值。检查下一个代码:

function bouncer(arr)
{
    for (var i = 0; i < arr.length; i++)
    {
        if (Boolean(arr[i]) === false)
        {
            arr.splice(i, 1);
            i = i - 1;
        }
    }

    console.log(arr);
}

bouncer([false, null, true, 0, NaN, undefined, "", "Hola Mundo"]);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

关于javascript - 无法删除数组中的所有 Boolean == false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54096449/

相关文章:

javascript - 你如何在 JavaScript 中转换为半 float ?

java - 如何在java中检查 boolean 方法的返回值

bash - 对 boolean 变量的操作

javascript - jQuery 删除它不应该删除的 <option> 标签

javascript - Facebook javascript 登录 sdk,提要未定义

arrays - 具有自定义数据数组的函数

java - 我的java代码在线程 "main"java.lang.ArrayIndexOutOfBoundsException中抛出异常?

python - 元组中评估为 False 的变量

javascript - 从普通文本顺利淡化为斜体文本?

javascript - 将 Javascript 子数组转换为一个数组