每日分享!~ JavaScript数组去重

数组去重

数组去重在很多面试的过程中,都是大题出现!网络上出现了很多数组去重的方式。多数的达到了12种以上。

今天我只给大家介绍两种我比较喜欢,比较认可!入手简单的~能解决自己的问题就可以了

好了 ,不多bb,直接上代码:

方式1:   indexOf

 <script>
        // 业务要求
        /**
            数组的去重
        **/

        // 方式1 使用indexof方式
        function ClearArray(arr){
            // 创建一个新的数组来存放去重之后的数组
            var newArr = []
            // 将传入数组进行循环遍历处理
            arr.forEach(item => {
                // 使用indexof 判断newArr中数组是否存在,不存在的话直接push进去
               if ( newArr.indexOf(item) === (-1)) {
                   newArr.push(item)
               }
            })
            return newArr
        }
        // 测试数组
        var arr = [1,3,4,5,6,4,33,3,3,,4,3]
        console.log(ClearArray(arr))
        //结果 [1, 3, 4, 5, 6, 33]   
    </script>

注意:这个判断是对于定义新数组去判断,不是对需要判断对数组。

总结,利用indexOf方法判断新数组中是否存在该元素,不存在的话,push 到新数组中去,如果push过,在次判断的时候,就会显示存在,这样就会直接跳过。

 

----------------------------------------黄金分割线---------------------------------------------------------------

方式2  splice()

直接上代码:

 function ClearArray(arr){
            // 首先循环遍历该数组
            for(var i = 0; i<arr.length; i++){
                for(var j=i+1; j<arr.length; j++){
                    //用第一个元素跟其他元素进行对比
                    if (arr[i] === arr[j]){
                        // 如果该元素跟本身元素相同,那么去掉该元素
                        arr.splice(j,1)
                        j--
                    }
                }
            }
            // return 该元素
            return arr
        }
        var arr = [1,3,4,5,6,4,33,3,3,,4,3]
        console.log(ClearArray(arr))
     // 结果 [1, 3, 4, 5, 6, 33, empty]

注意, 这个方式是通过二次循环来判断,一个元素同其他元素对比。如果与该元素相同的话,则需要通过splice方法,去掉该元素。

 

-----------------------------分割线------------------------------------------

总结以上两种方法的差异:

相信大家通过结果。关注了两个方式的结果不一致,第一个结果去重:将空元素都去掉了。第二个方式没有,而是显示的empty 。

如果该元素不需要空元素的话,建议使用第一种方式。如果需要的话, 建议使用第二种方式。

 

posted @ 2019-04-20 22:54  yaogengzhu  阅读(317)  评论(0编辑  收藏  举报