查找 NaN 并添加到新阵列

我正在尝试从数组中删除重复项,但是,当我内部有NaN并且数组不起作用时, 它不起作用。如何检测NaN并将其仅推送一次到新阵列


我已经尝试过这个代码,它适用于其他场景,但不适用于NaN


removeDupReduce([1, 2, 1, 3, 1, 4]) // Works Fine

removeDupReduce([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

    },[])

}


慕神8447489
浏览 91回答 3
3回答

GCT1015

您可以使用来搜索 NaN,如下所示:array.findIndexfunction 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]))

眼眸繁星

NaN不等于 。它可能是违反直觉的,但它是什么。NaNindexOf将逐个检查项目以查看它们是否与您的值相等,但由于如此,它将始终返回 -1。NaN != NaN要验证这一点,只需运行:[NaN].indexOf(NaN) // this will return -1如果要检查数组是否包含,请使用 查找并使用 。NaNisNaNif (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)}

慕的地10843

发生这种情况是因为您的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, [])}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript