将空对象与 0 理解为数字
Understanding null object vs 0 as number
我在 Codewars 上试图完成一些任务并提出了一个问题
创建一个给定稀疏数组的 toDense() 函数,它 return 是相应的密集数组。我使用了如下所示的测试用例:
var sparse = [undefined, 2, null, , , 0, 6, null];
Test.assertSimilar( toDense(sparse), [2, 0, 6]);
我对代码的解决方案是:
function toDense(sparse){
function isBoolean(value)
{
if(value >= 0)
{
if(!(typeof(value) === 'object'))
return value;
}
}
return sparse.filter(isBoolean);
}
但是我无法让数组成为[2,0,6],我得到的数组是[2,6]。我的问题是如果null是一个对象而0是一个数字为什么我没有如果条件为 0 return 值?
你的错误发生是因为你 return 0 到评估为假的过滤器函数。
var arr = [0,1,2,3];
console.log(arr.filter(function(v) { return v; }));
您的评价被错误的转化误导了。
替换
if(value >= 0)
有
if(value > 0 || value === 0)
这解决了你的断言。
我在 Codewars 上试图完成一些任务并提出了一个问题
创建一个给定稀疏数组的 toDense() 函数,它 return 是相应的密集数组。我使用了如下所示的测试用例:
var sparse = [undefined, 2, null, , , 0, 6, null];
Test.assertSimilar( toDense(sparse), [2, 0, 6]);
我对代码的解决方案是:
function toDense(sparse){
function isBoolean(value)
{
if(value >= 0)
{
if(!(typeof(value) === 'object'))
return value;
}
}
return sparse.filter(isBoolean);
}
但是我无法让数组成为[2,0,6],我得到的数组是[2,6]。我的问题是如果null是一个对象而0是一个数字为什么我没有如果条件为 0 return 值?
你的错误发生是因为你 return 0 到评估为假的过滤器函数。
var arr = [0,1,2,3];
console.log(arr.filter(function(v) { return v; }));
您的评价被错误的转化误导了。
替换
if(value >= 0)
有
if(value > 0 || value === 0)
这解决了你的断言。