数组去重,你第一想到的方法是啥?
这样:?
// 定义一个数组const arr = [1,2,3,4,4,5,7,7,6]// 定义一个对象存储已经遍历过的值let obj = {}// 定义保存去重后的数组let newArr = []// 循环遍历数组for(let i = 0; i < arr.length; i++) {// 判断是否已经遍历过这个相同的值// 是没有遍历过的值的话 if(!obj[arr[i]]){ // 保存到去重的数组中 newArr.push(arr[i]) // 在对象中记录这个值已经遍历过了 obj[arr[i]] = i }}console.log(newArr)// [1, 2, 3, 4, 5, 7, 6]
没毛病,已经解决了数组去重的这个需求,这在我还没接触 es6 时确实是这样干的,在学完 es6 后,我发现 es6 的数组去重方试真的方便的不要不要的
比如你可以这样简单的去重(reduce):
// 定义一个数组const arr = [1,2,3,4,4,5,7,7,6]let newArr = arr.reduce((pre,cur)=>{ // 判断上一次调用回调时返回的累积值数组里面 // 有没有正在循环的这个值 if(!pre.includes(cur)){ // 没有就拼接到上一次调用回调时返回的累积值数组里面 // 并作为回调的返回值 return pre.concat(cur) }else{ // 有的话直接返回上一次调用回调时返回的累积值数组 return pre } // 把 [] 空数组作为第一次调用 callback函数时的第一个参数的值},[])console.log(newArr)
是不是代码少了很多?什么还不是少的很明显?好吧,接下来的方式就很明显了
// 定义一个数组const arr = [1,2,3,4,4,5,7,7,6]// 去重let newArr = [...new Set(arr )]console.log(newArr)
是不是明显少了很多代码量,哈哈哈! 还有别的简单的,小伙伴们可以去探索探索,可以提高不少板砖效率的
可能会说新语法不兼容的问题,其实呢,我们大部分的搬砖都是使用脚手架的,大部分的脚手架都有配置 babel 来把新的语法转为 es5 的,在没有用到脚手架的也可以自己使用 babel 来转换一下
在最后给你们推荐个有趣的东西 --- 我的个人视频号,不定时发表一些关于程序员的搞笑视频,或者学习视频,有兴趣的可以关注一波哦,哈哈哈?