1. 程式人生 > 其它 >js 去除陣列物件裡面的重複物件

js 去除陣列物件裡面的重複物件

技術標籤:陣列陣列物件js字串jsonjavascript前端

去除陣列物件裡面的重複物件,這種情況在專案裡面是經常遇到的一個需求,方便以後使用這裡記錄一下:

1、根據物件裡面的一個屬性去重,以id為例

類似於陣列的去重,可以使用 indexOf 、include、lastIndexOf、find 等,這裡只用 indexOf 實現一下。

let arr = [
	{id:1, name:'test', status:'success'},
	{id:2, name:'dev', status:'success'},
	{id:3, name:'prod', status:'fail'
}, {id:4, name:'sand', status:'waiting'}, {id:3, name:'box', status:'running'}, {id:2, name:'dev', status:'success'} ] function objHeavy(arr){ let arr1 = []; //存id let newArr = []; //存新陣列 for(let i in arr){ if(arr1.indexOf(arr[i].id) == -1){ arr1.push(arr[i].id); newArr.push(arr[i]); } }
return newArr; }

結果:
在這裡插入圖片描述

2、只去重完全相同物件(屬性屬性值都相同)

大致思路如下:
首先、迴圈陣列,拿到物件的所有屬性組成的陣列;
其次、迴圈屬性陣列把物件的屬性和對應的值拼接成字串;
然後、利用 hasOwnProperty 方法判斷這個字串是不是物件 obj 裡的屬性,如果不是則以這個字串為屬性,true為值給 obj 物件新增一個屬性;
最後、繼續迴圈判斷下一個物件;

let arr = [
	{id:1, name:'test', status:'success'},
	{id:2, name:'dev', status:'success'},
	{id:3,
name:'prod', status:'fail'}, {id:4, name:'sand', status:'waiting'}, {id:3, name:'prod', status:'fail'}, {id:2, name:'dev', status:'success'} ] function objHeavy(arr){ var newArr= []; //存新陣列 var obj= {}; //存處理後轉成字串的物件 for (var i = 0; i < arr.length; i++) { var keys = Object.keys(arr[i]); keys.sort(function(a, b) { return (Number(a) - Number(b)); }); var str = ''; for (var j = 0; j < keys.length; j++) { str += JSON.stringify(keys[j]); str += JSON.stringify(arr[i][keys[j]]); } if (!obj.hasOwnProperty(str)) { newArr.push(arr[i]); obj[str] = true; } } return newArr; }

結果:
在這裡插入圖片描述