欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-22 09:57:22
JS数组去重和统计元素个数数组去重统计数组中每个元素的个数数组去重使用splice()方法与双层循环去除重复的元素splice()方法用于删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素。例: let a = [2, 4, 1, 2, 4, 5, 9, 5]; function b(a) { for (let i = 0; i < a.length; i++) {...

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数组去重和统计数组中每个元素出现次数的几种方法,不足之处,日后会继续改进。

本文地址:https://blog.csdn.net/weixin_46628546/article/details/107522513