JS实现数组去重及数组内对象去重功能示例

<!DOCTYPE html>
<html lang="en">

 

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

 

<body>

 

</body>
<script>
    //去重
    var newarr = [];
    // var arr = this.msg;
    var arr = [{
        name: 1,
        ccc: 2
    }, {
        name: 2
    }, {
        name: 2
    }, {
        name: 3
    }, {
        name: 3
    }, {
        name: 4
    }, {
        name: 151
    }, {
        name: 1
    }, ];
    //Es6 + ES5去重办法
    function duplicate(arr, type) {
        if (arr.length == 0) {
            return arr;
        } else {
            if (type) {
                var obj = {}
                    //利用ES6  reduce 累加方法
                var newArr = arr.reduce((cur, next) => {
      //name是对象键的  名字 保持同步
                    obj[next.name] ? "" : obj[next.name] = true && cur.push(next);
                    return cur;
                }, [])
                return newArr;
            } else {
                return Array.from(new Set(arr));
            }
        }
    }




    //ES5原生去重办法
    function duplicate2(arr, type) {
        var newArr = [];
        var tArr = [];
        if (arr.length == 0) {
            return arr;
        } else {
            if (type) {
                for (var i = 0; i < arr.length; i++) {
                    if (!tArr[arr[i][type]]) {
                        newArr.push(arr[i]);
                        tArr[arr[i][type]] = true;
                    }
                }
                return newArr;
            } else {
                for (var i = 0; i < arr.length; i++) {
                    if (!tArr[arr[i]]) {
                        newArr.push(arr[i]);
                        tArr[arr[i]] = true;
                    }
                }
                return newArr;
            }
        }
    }
    console.log('ES5去重', duplicate2(arr, "name"));



    console.log('ES6去重', duplicate(arr, "name"));
</script>

 

</html>
posted @   小猴子会上树  阅读(208)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2018-09-14 全选反选以及获取选中的数据
点击右上角即可分享
微信分享提示