Javascript Can';t删除数组中的所有布尔==false

Javascript Can';t删除数组中的所有布尔==false,javascript,arrays,boolean,splice,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) {

给定具有不同数据类型的数组。我编写了一个函数来查找那些
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);
}
II.

我不明白为什么它会返回布尔值false,比如
NaN
null
。但它正确地拼接了空字符串(
)或
未定义的值

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

非常感谢您的澄清。

只需像这样使用即可

过滤器在这里所做的是仅当它为true时才在输出数组中添加值

让arr=[false,null,0,NaN,undefined,”,1123];
设op=arr.filter(值=>value);

console.log(op)
您几乎完成了,但是最好是检查哪些值是错误的,而不是比较它们,所以这个函数可以完成这个任务

const getNonFalsyValues = (arr) => {
  return arr.reduce((arr, current) => {
    if (Boolean(current)) {
        arr.push(current);
    }
    return arr;
  }, []);
}

我希望它能帮助您。

在JavaScript中,一些值的计算结果为
false
,如
null
、空字符串
'
未定义
。您可以在JavaScript中查看有关评估的更多信息


此外,在比较中应使用
===
而不是
==
。请参阅。

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

const数组=[false,null,true,0,NaN,undefined,”,“Hola Mundo”];
log(array.filter(Boolean))
.as控制台{背景色:黑色!重要;颜色:石灰;}

。由于控制台包装器{max height:100%!important;top:0;}
JavaScript具有“falsy”的概念,因此请使用
==
而不是
=
。在此处阅读更多内容:除非您知道自己在做什么,否则不要更改正在迭代的数组;)检查每个步骤上的元素。(提示:删除元素后,元素会发生什么情况?)
In case of input: `bouncer([false, null, 0, NaN, undefined, ""]);`
It returns: [ null, NaN, '' ]
But it should return: []
const bouncer = (arr) => arr.filter(val => !!val);
const getNonFalsyValues = (arr) => {
  return arr.reduce((arr, current) => {
    if (Boolean(current)) {
        arr.push(current);
    }
    return arr;
  }, []);
}