現在有這樣對象數組,我只想根據姓名對數組進行去重
<!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>