请老师检查

来源:3-11 项目作业

陆小小

2021-09-29 15:46:15

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <title>三种方式去重</title>
</head>

<body>
    <script>
        const arr = [1, 1, '1', 17, true, true, false, false, 'true', 'a', {}, {}];


        //方法一(Set)
        // const newArr = new Set(arr);
        // console.log([...newArr]);


        //方法二(for)
        // let newArr = [];
        // for(let i = 0;i<arr.length;i++){
        //     if(arr[i] !== arr[i+1]){
        //         newArr.push(arr[i]);
        //     }
        // }
        // console.log(newArr);


        // 方法三(reduce)
        // const newArr = arr.reduce((a,b)=>{
        //     if(a.indexOf(b) == -1){
        //         a.push(b);
        //         // console.log(a);
        //     }
        //     return a;
        // },[])
        // console.log(newArr);
    </script>
</body>

</html>

问题描述:

我在用方法二的时候在判断语句!=和!==的出来的项分别是8和9,具体是什么原因呢

相关代码:

 //方法二(for)
        // let newArr = [];
        // for(let i = 0;i<arr.length;i++){
        //     if(arr[i] !== arr[i+1]){
        //         newArr.push(arr[i]);
        //     }
        // }
        // console.log(newArr);


写回答

1回答

好帮手慕然然

2021-09-29

同学你好,这三种实现方法都没问题,关于方法二中 !=和 !==的区别:

!=只比较值,不比较数据类型,而!==既会比较值,也会比较数据类型(只要有一个不等时就不等)。

以下数组中的元素中,既有数字类型的1,也有字符串类型的1

const arr = [1, 1, '1', 17, true, true, false, false, 'true', 'a', {}, {}];

如果使用!=的话, 1 != "1" 结果为false,如果使用!==的话,1 !== "1" 结果为true,如图

https://img.mukewang.com/climg/61541f090919202105010161.jpg

所以,使用!=会将数组中的1、'1'当做是相同的数据,只会push一个到newArr数组中。

而!==会将数组中的1、'1'当做不同的数据,全部push进newArr数组中。

祝学习愉快!

0

前端工程师

前端入门如同写字,如果你不知道从哪开始,那就选择前端(含Vue3.x,React17,TS)

20327 学习 · 17877 问题

查看课程

相似问题