【发布时间】:2019-06-03 10:04:58
【问题描述】:
给定一个具有不同数据类型的数组。我编写了一个函数来查找那些为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]
II.)
In case of input: `bouncer([false, null, 0, NaN, undefined, ""]);`
It returns: [ null, NaN, '' ]
But it should return: []
我不明白为什么它返回布尔 false 值,例如 NaN 或 null。但它会正确拼接空字符串 ("") 或 undefined 等值。
我也不明白,为什么在第一种情况下它返回false(这不是故意的),但在第二种情况下它不返回false。
非常感谢您的澄清。
【问题讨论】:
-
JavaScript 有“假”的概念,所以用
===代替==。在这里阅读更多:developer.mozilla.org/en-US/docs/Glossary/Falsy -
不要改变你正在迭代的数组,除非你知道你在做什么;)检查每一步的元素。 (提示:被移除的元素之后的元素发生了什么?)
标签: javascript arrays boolean splice