数组中是一个对象的去重方式

75 阅读1分钟

--- 所有的东西都是自己学习,工作中遇到的一些问题,写下来只是为了用以记录。以后方便查看,有不足之处,欢迎大家指正。

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数组对象的去重</title>
</head>

<body>
    <script>

        var arr = [
            { id: 1, name: '周瑜1' },
            { id: 3, name: '王昭君1' },
            { id: 2, name: '李白1' },
            { id: 1, name: '周瑜2' },
            { id: 2, name: '李白2' },
            { id: 3, name: '王昭君2' }
        ];
        // 利用reduce()方法去重
        let newobj = {};
        arr = arr.reduce((preVal, curVal) => {
            newobj[curVal.id] ? '' : newobj[curVal.id] = preVal.push(curVal);
            return preVal;
        }, [])
        console.log(arr);

        // 利用原生的方法去重,for循环与对象获取属性的方式
        function distinctl(arr, key) {
            var newobj = {}, newArr = [];
            for (var i = 0; i < arr.length; i++) {
                var item = arr[i];
                if (!newobj[item[key]]) {
                    newobj[item[key]] = newArr.push(item);
                }
            }
            return newArr;
        }
        distinctl(arr,'id')

        //    利用Set去重
        function distinct(arr, key) {
            var newobj = new Set(), newArr = [];
            for (var i = 0; i < arr.length; i++) {
                var item = arr[i];
                if (!newobj.has(item[key])) {
                    newobj.add(item[key]);
                    newArr.push(item);
                }
            }
            return newArr;
        }
        // console.log(distinct(arr, 'id'));
        // 利用splice与双重for循环去重
        for (var i = 0; i < arr.length; i++) {
            for (var j = i + 1; j < arr.length; j++) {
                if (arr[i].id == arr[j].id) {
                    arr.splice(j, 1);
                    j--;
                }
            }
        }
        console.log(arr);
    </script>

</body>

</html>