JavaScript短路评估-缺少属性值

JavaScript短路评估-缺少属性值,javascript,short-circuiting,Javascript,Short Circuiting,我试图改进我的编码实践,因此我尝试重构以下代码: 编辑我的问题是短路评估的最佳实践是什么 我认为&&&ing是问题所在,但我看不到排除NaN值的其他方法。此时,我可以将0返回到结果数组中。最后,如果有人知道一个学习短路评估的好来源,我将不胜感激。谢谢 J.if(obj.id)将在obj.id为0时返回false。您应该重构为这样的内容,以说明零: let idF0 = idArray.reduce((acc, obj) => { if(typeof obj.id === 'number

我试图改进我的编码实践,因此我尝试重构以下代码:

编辑我的问题是短路评估的最佳实践是什么

我认为&&&ing是问题所在,但我看不到排除NaN值的其他方法。此时,我可以将
0
返回到结果数组中。最后,如果有人知道一个学习短路评估的好来源,我将不胜感激。谢谢

J.

if(obj.id)
将在
obj.id
0
时返回
false
。您应该重构为这样的内容,以说明零:

let idF0 = idArray.reduce((acc, obj) => {
  if(typeof obj.id === 'number'  && !isNaN(obj.id))
    acc.push(obj.id)
  return acc
},[]) 

并且如果您想了解更多的性能,请考虑下面的解决方案,它以线性时间复杂度运行,如<代码>还原()/<代码>,但比还原()/<代码>解决方案要快得多:

let idF0 = [], i = 0, length = idArray.length, id;

for (; i < length; i++) {
  id = idArray[i].id;
  if (id === 'number' && !isNaN(id)) {
    idF0.push(id);
  }
}

return idF0;
让idF0=[],i=0,length=idArray.length,id;
对于(;i
您可以筛选和映射项目,并检查类型和id。值不是
NaN

var-idArray=[{id:15},{id:-1},{id:0},{id:3},{id:12.2},{},{id:null},{id:NaN},{id:'undefined'}],
idFiltered=idArray
.filter(({id})=>typeof id=='number'&&&!isNaN(id))
.map(({id})=>id);

console.log(idFiltered)
你打算做什么?@Pointy我的目的是短路评估,我也可以用(obj.id | | obj.id)很抱歉回复太晚,我的wifi刚刚熄灭。我将编辑我的问题。
(obj.id | | obj.id==0)
会更有意义
(obj.id | | 0)
仍将计算为
false
@Pointy谢谢。我对这个概念还不熟悉,也许我可以把这些关系记录下来,看看接下来会发生什么。
let idF0 = [], i = 0, length = idArray.length, id;

for (; i < length; i++) {
  id = idArray[i].id;
  if (id === 'number' && !isNaN(id)) {
    idF0.push(id);
  }
}

return idF0;