为了账号安全,请及时绑定邮箱和手机立即绑定

查找 NaN 并添加到新阵列

查找 NaN 并添加到新阵列

慕神8447489 2022-08-04 17:36:23
我正在尝试从数组中删除重复项,但是,当我内部有NaN并且数组不起作用时, 它不起作用。如何检测NaN并将其仅推送一次到新阵列我已经尝试过这个代码,它适用于其他场景,但不适用于NaNremoveDupReduce([1, 2, 1, 3, 1, 4]) // Works FineremoveDupReduce([NaN, 2, NaN, 3, 1, NaN]) // It returns ['NaN', 2, 3, 1] Instead I want it to return [NaN, 2, 3, 1] I know I have converted into string using toString. but dont though of other ideas.function removeDupReduce(list) {    return [...list].reduce((acc,curr)=>{        if(acc.indexOf(curr) === -1){            if(isNaN(curr)){                curr = curr.toString()                if(acc.indexOf(curr) === -1)                acc.push(curr)            }            else{            var a = acc.indexOf(curr)            acc.push(curr)            }        }        return acc    },[])}
查看完整描述

3 回答

?
GCT1015

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]))


查看完整回答
反对 回复 2022-08-04
?
眼眸繁星

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)

}



查看完整回答
反对 回复 2022-08-04
?
慕的地10843

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, [])

}


查看完整回答
反对 回复 2022-08-04
  • 3 回答
  • 0 关注
  • 90 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号