3 回答

TA贡献1827条经验 获得超4个赞
您可以使用来搜索 NaN,如下所示:array.findIndex
function removeDupReduce(list) {
return [...list].reduce((acc,curr)=>{
if(acc.indexOf(curr) === -1){
if(isNaN(curr)){
if(acc.findIndex(Number.isNaN) === -1)
acc.push(curr)
}
else{
var a = acc.indexOf(curr)
acc.push(curr)
}
}
return acc
},[])
}
console.log("removeDupReduce([1, 2, 1, 3, 1, 4])")
console.log(removeDupReduce([1, 2, 1, 3, 1, 4]))
console.log("removeDupReduce([NaN, 2, NaN, 3, 1, NaN])")
console.log(removeDupReduce([NaN, 2, NaN, 3, 1, NaN]))

TA贡献1873条经验 获得超9个赞
NaN不等于 。它可能是违反直觉的,但它是什么。NaN
indexOf将逐个检查项目以查看它们是否与您的值相等,但由于如此,它将始终返回 -1。NaN != NaN
要验证这一点,只需运行:
[NaN].indexOf(NaN) // this will return -1
如果要检查数组是否包含,请使用 查找并使用 。NaNisNaN
if (acc.find(item => isNaN(item)) // we have NaN in the array.
您需要更新 if 条件以反映这一点。
if(acc.indexOf(curr) === -1 && (!isNaN(curr) || !acc.find(item => isNaN(item))) {
acc.push(curr)
}

TA贡献1785条经验 获得超8个赞
发生这种情况是因为您的if语句不正确。你可以检查是真是假,因为给你假的。如果仅指定条件内变量的名称,则会将其设置为并相应地进行检查或。同样在代码中,如果 出现 以下情况,则重复条件。试用我的解决方案Boolean(curr)Boolean(NaN)currBoolean(curr)truefalseacc.indexOf()
console.log(removeDupReduce([1, 2, 1, 3, 1, 4]))
console.log(removeDupReduce([NaN, 2, NaN, 3, 1, NaN]))
function removeDupReduce(list) {
return [...list].reduce((acc,curr)=> curr && acc.indexOf(curr) === -1 ? [...acc, curr] : acc, [])
}
添加回答
举报