如何根據數組對象的某一個值進行去重


現在有這樣對象數組,我只想根據姓名對數組進行去重

 

<!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>
    <script>
        var arr = [
            {
                "id": "1",
                "name": "張三"
            },
            {
                "id": "2",
                "name": "張三"
            },
            {
                "id": "3",
                "name": "張三"
            },
            {
                "id": "4",
                "name": "李四"
            },
            {
                "id": "5",
                "name": "李四"
            },
            {
                "id": "6",
                "name": "王五"
            }
        ]

        /**
         * 根據對象的一個屬性值對數組去重
         * @param arr  數組
         * @param attrName 屬性名
         * @returns Array去重后的新數組
         */
        function unique(arr, attrName) {
            const res = new Map();
            return arr.filter((a) => !res.has(a[attrName]) && res.set(a[attrName], 1));
        }


        
        console.log(unique(arr, 'name'));
        
    </script>
</body>

</html>

 

 

Map結構提供了“值—值”的對應,是一種更完善的Hash結構實現。如果你需要“鍵值對”的數據結構,Map比Object更合適。它類似於對象,也是鍵值對的集合,但是“鍵”的范圍不限於字符串,各種類型的值(包括對象)都可以當作鍵。

如果Map的鍵是一個簡單類型的值(數字、字符串、布爾值),則只要兩個值嚴格相等,Map將其視為一個鍵,包括0和-0。另外,雖然NaN不嚴格相等於自身,但Map將其視為同一個鍵。

<!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>
    <script>
        var arr = [
            {
                "id": "1",
                "name": "張三"
            },
            {
                "id": "2",
                "name": NaN
            },
            {
                "id": "3",
                "name": "張三"
            },
            {
                "id": "4",
                "name": NaN
            },
            {
                "id": "5",
                "name": "李四"
            },
            {
                "id": "6",
                "name": "王五"
            }
        ]

        /**
         * 根據對象的一個屬性值對數組去重
         * @param arr  數組
         * @param attrName 屬性名
         * @returns Array去重后的新數組
         */
        function unique(arr, attrName) {
            const res = new Map();
            return arr.filter((a) => !res.has(a[attrName]) && res.set(a[attrName], 1));
        }


        
        console.log(unique(arr, 'name'));
        
    </script>
</body>

</html>

 

 

 

總結:在開發過程中,涉及到數據結構,能使用Map 不使用Array 尤其是復雜的數據結構 ,如果對於數組的存儲考慮唯一性 使用Set ,優先使用map 如果要求數據儲存的唯一性使用Set 放棄使用Array。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM