JS基础四(数组去重和统计元素的个数)

JS数组去重和统计元素个数

数组去重

  1. 使用splice()方法与双层循环去除重复的元素

splice()方法用于删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素。

例:

            let a = [2, 4, 1, 2, 4, 5, 9, 5];
            function b(a) {
                for (let i = 0; i < a.length; i++) {
                    for (let j = i + 1; j < a.length; j++) {
                        if (a[i] === a[j]) {
                            a.splice(j,1)
                            //j--;
                        }
                    }
                }
            }
            b(a)
            console.log(a); //[2, 4, 1, 5, 9]
  1. 使用indexOf()方法去除重复的元素

indexOf方法返回给定元素在数组中第一次出现的位置,返回结果是匹配开始的位置。如果没有出现则返回-1

例:

        var arr = [2, 4, 1, 2, 4, 5, 9, 5];
        var newArr = [];
        for (var i = 0, len = arr.length; i < len; i++) {
            if (newArr.indexOf(arr[i]) == -1) {
                newArr.push(arr[i]);
            }
        }
        console.log(newArr);//[2, 4, 1, 5, 9]
  1. 使用set与Array.from()方法去除重复的元素

Array.from方法可以将 Set 结构转为数组。

例:

        var arr = [2, 4, 1, 2, 4, 5, 9, 5];
        var newArr = Array.from(new Set(arr));
        console.log(newArr);//[2, 4, 1, 5, 9]
  1. 利用对象的属性不能相同的特点进行去重
    例:
var a = [2, 4, 1, 2, 4, 5, 9, 5];
        var newArr = [];
        var o = {}; 
        for (let i = 0; i < a.length; i++) {
            var t = a[i];
            if(o[t]){  // 标记是否处理过
    
            }else{
                newArr.push(a[i]);
                o[t] = true;
            }
        }
        console.log(newArr)//[2, 4, 1, 5, 9]
  1. 利用对象的属性不能相同的特点进行去重
    例:
        Array.prototype.distinct = function () {
            var arr = this,
                i,
                obj = {},
                result = [],
                len = arr.length;
            for (i = 0; i < arr.length; i++) {
                if (!obj[arr[i]]) { //如果能查找到,证明数组元素重复了
                    obj[arr[i]] = 1;
                    result.push(arr[i]);
                }
            }
            return result;
        };
        var a = [2, 4, 1, 2, 4, 5, 9, 5];
        var b = a.distinct();
        console.log(b.toString()); //2,4,1,5,9
  1. 数组递归去重

运用递归的思想先排序,然后从最后开始比较,遇到相同,则删除

例:

        Array.prototype.distinct = function () {
            var arr = this,
                len = arr.length;
            arr.sort(function (a, b) { //对数组进行排序才能方便比较
                return a - b;
            })
            function loop(index) {
                if (index >= 1) {
                    if (arr[index] === arr[index - 1]) {
                        arr.splice(index, 1);
                    }
                    loop(index - 1); //递归loop函数进行去重
                }
            }
            loop(len - 1);
            return arr;
        };
        var a = [2, 4, 1, 2, 4, 5, 9, 5];
        var b = a.distinct();
        console.log(b.toString()); //1,2,4,5,9

统计数组中每个元素的个数

 var a = [1,1,2,3,4,5,5,6];
        function f(a) {
            var obj = {};
            for (let i = 0; i < a.length; i++) {
                var t = a[i];
                if (obj.hasOwnProperty(t)){
                    obj[t] = obj[t]+1;
                }else{
                    obj[t] = 1;
                }
            }
            return obj;
        }
        console.log(f(a));//{1: 1, 2: 2, 4: 2, 5: 2, 9: 1}
        var n = [2, 4, 1, 2, 4, 5, 9, 5];
        var m = {}
        for (var i = 0; i < n.length; i++) {
            var v = n[i];
            var counts = m[v];
            if (counts) {
                m[v] += 1;
            } else {
                m[v] = 1;
            }
        }
        console.log(m)//{1: 1, 2: 2, 4: 2, 5: 2, 9: 1}

总结

以上是关于JavaScript数组去重和统计数组中每个元素出现次数的几种方法,不足之处,日后会继续改进。

猜你喜欢

转载自blog.csdn.net/weixin_46628546/article/details/107522513