很多時候,我們需要去除對象當中的重復的數(shù)據(jù),但網(wǎng)絡上處理重復數(shù)據(jù)的方法多是通過indexOf( )來除去,但有時,我們只是因為有某個屬性相同而需要去重。
案例
dataInfo = [
{ name: "入口",value: [100, 20],img: "") },
{ name: "展廳", value: [90, 60], img: "") },
{ name: "演示廳", value: [55, 60], img: "./../logo.png") },
{ name: "教室", value: [20, 70], img: "") },
{ name: "演示廳", value: [85, 90], img: "./img.png") }
]
代碼
如上,我需要清除的數(shù)據(jù)是重復的name數(shù)據(jù)“演示廳”。如果使用indexOf永遠得到的數(shù)據(jù)值是-1。
所以,我調(diào)整了一些思路,如下源碼:
/**
* js快速行之有效的去重數(shù)據(jù)操作
* @param {object} array 數(shù)組對象
* @param {string} name 去重的判斷對象
* @return {string} n 返回數(shù)組
*/
uniqueArr(array, name){
let bb = JSON.stringify(array);
var n = JSON.parse(bb); // 一個新的臨時數(shù)組
// 遍歷當前數(shù)組
for (let i=0, len=n.length; i<len; i++) {
for (let j=i+1; j<len; j++) {
if (n[i][name] == n[j][name]) {
n.splice(j, 1);
// splice 會改變數(shù)組長度,所以要將數(shù)組長度 len 和下標 j 減一
len--;
j--;
}
}
}
return n;
}
接收返回這個函數(shù)即可。
當然,去重的方法有很多種,需要根據(jù)具體業(yè)務來操作。
如果這種方法無法解決你的問題,推薦閱讀:
JavaScript數(shù)組去重(12種方法,史上最全)