本文是參考了一篇文章後進行的擴展,參考文章地址https://blog.csdn.net/yjltx1234csdn/article/details/93766707
以下代碼可以直接複製,進行工具的使用(本人主學後端,所以js可能寫的差,請見諒!)
/**
* 實現自定義數組對象去重
* @param arr 去重的數組 前提保證數組中的對象包含需要的去重的標誌屬性
* @param attributes 自定義的對象的屬性 數組 標誌屬性組
* @return newArr 根據標誌屬性去重的數組
*/
function customDeweighting (arr,attributes) {
/*
1.根據特定的屬性對比,需要先獲取一個新的數組
2.利用indexof函數對字符串數組進行判斷,如果不存在就加入到新的數組裏面,進行返回
*/
let newStr = [];
let newArr =[];
for (let i=0;i<arr.length;i++){
let temp = {}; //還是json對象
let obj = arr[i];
for(let j=0;j<attributes.length;j++){
temp[attributes[j]] = obj[attributes[j]];
}
let thisStr = JSON.stringify(temp);
// 去除空格及\t空白字符
thisStr = thisStr.replace(/(\s|[\\t])/g,'');
if (newStr.indexOf(thisStr)===-1){
newStr.push(thisStr);
newArr.push(arr[i]);
}
}
return newArr;
}
/**
*add方法,保證一個數組添加以後沒有重複的值,必須保證添加的目的數組是無重複的元素的
* @param arr 無重複無元素的目的數組
* @param item 添加的對象
* @returns {[]}
*/
function addUnique(arr,item) {
//將數組對象轉換爲數組字符串
let newStr = arrToString(arr);
newStr.sort();
//先放置第一個
let temp = itemToString(item);
// 數組去重
let flag = false;
for(let i=0;i<newStr.length;i++){
if(newStr[i]===temp){
flag = true;
}
}
if (!flag){
arr.push(item);
}
return arr;
}
/**
* 也是在一個數組裏面添加一個元素,但是arr是包含有重複元素的
* @param arr 包含有重複元素的目的數組
* @param item 要添加的元素
* 備註 感覺這個方法沒神魔用
*/
function addUniqueArr(arr,item) {
arr.push(item);
return uniqueObject(arr);
}
/**
* 數組去重主方法
* @param arr 進行去重的數組
* @returns {[]}
*/
function uniqueObject(arr){
//存放的是字符串形式的數組。
let tempArr = [];
//將數組對象轉成數組字符串。
let newStr =arrToString(arr);
newStr.sort();
//先放置第一個
let temp=newStr[0];
tempArr.push(temp);
// 數組去重
for(let i=1;i<newStr.length;i++){
if(newStr[i]!==temp){
temp=newStr[i]; //放置到集合裏面。
tempArr.push(newStr[i]);
}
}
//上面,集合還是字符串形式的數組,需要轉換成json對象的形式。
let newArr = [];
// 新數組字符串轉成數組對象
for(let i=0;i<tempArr.length;i++){
newArr.push(JSON.parse(tempArr[i]));
}
return newArr;
}
/**
*將數組轉換爲 字符串數組
* @param arr 對象數組
* @returns {Array} 轉換成字符串的數組
*/
function arrToString(arr){
let newArr = [];
if(arr.length !== 0){
for(let i=0;i<arr.length;i++){ //對每一個對象數據進行處理。
//將每一個對象裏面的屬性key 進行重新排序,變成新的對象。
let thisStr = itemToString(arr[i]);
//裏面放置字符串
newArr.push(thisStr);
}
}
return newArr;
}
/**
* 將元素轉換爲字符串
* @param item
* @returns {string}
*/
function itemToString(item) {
//將每一個對象裏面的屬性key 進行重新排序,變成新的對象。
let thisObj = sortObject(item);
//將json對象,轉換成字符串
let thisStr = JSON.stringify(thisObj);
// 去除空格及\t空白字符
thisStr = thisStr.replace(/(\s|[\\t])/g,'');
return thisStr;
}
/**
*
* @param obj 對象
* @returns 將對象按照key值進行排序。
*/
function sortObject(obj){
let keyArr = [];
for(let item in obj){ //把所有的key放置在一個數組裏面。
keyArr.push(item);
};
keyArr.sort(); //排序,按照字符進行排序。
let newObj = {}; //還是json對象
for(let i=0;i<keyArr.length;i++){
newObj[keyArr[i]] = obj[keyArr[i]]
}
//處理成 鍵=值的數組形式。
//console.log("值是:"+JSON.stringify(newObj));
return newObj;
}
以上方法親測有效。