请老师检查
来源: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,如图

所以,使用!=会将数组中的1、'1'当做是相同的数据,只会push一个到newArr数组中。
而!==会将数组中的1、'1'当做不同的数据,全部push进newArr数组中。
祝学习愉快!