欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

20种方法!轻松搞定JavaScript对象数组的去重问题

最编程 2024-02-02 07:50:46
...
var arr= [
{
id: 1,
name: '两个蝴蝶飞',
sex:'男'
},
{
id: 1,
name: '两个蝴蝶飞',
sex:'男',
age:24
},
{
id: 2,
name: '两个蝴蝶飞',
sex: '男'
},
{
id:3,
name: '精灵妹',
sex:'女'
},
{
id: 2,
name: '两个蝴蝶飞',
sex: '男'
},
{
sex: '男',
name: '两个蝴蝶飞',
id: 2
},
{
name: '精灵妹',
id:3,
sex: '女'
},
{
name: '精灵妹',
id:4,
sex: '女'
}
];
console.log("去重之前的数组为:"+JSON.stringify(arr));
var arr1=uniqueObject(arr);
console.log("去重之后的数组为:"+JSON.stringify(arr1));



//对应的方法处理。
function uniqueObject(arr){
//存放的是字符串形式的数组。
var tempArr = [];
//将数组对象转成数组字符串。
var newStr =arrToString(arr);
newStr.sort();

//先放置第一个
var temp=newStr[0];
tempArr.push(temp);
// 数组去重
for(var i=1;i<newStr.length;i++){
if(newStr[i]!==temp){
temp=newStr[i]; //放置到集合里面。
tempArr.push(newStr[i]);
}
}
//上面,集合还是字符串形式的数组,需要转换成json对象的形式。
var newArr = [];
// 新数组字符串转成数组对象
for(var i=0;i<tempArr.length;i++){
newArr.push(JSON.parse(tempArr[i]));
}
return newArr;
}
/**
*
* @param arr 对象数组
* @returns {Array} 转换成字符串的数组
*/
function arrToString(arr){
var newArr = [];
if(arr.length !== 0){
for(var i=0;i<arr.length;i++){ //对每一个对象数据进行处理。
//将每一个对象里面的属性key 进行重新排序,变成新的对象。
var thisObj = sortObject(arr[i]);
//将json对象,转换成字符串
var thisStr = JSON.stringify(thisObj);
// 去除空格及\t空白字符
thisStr = thisStr.replace(/(\s|[\\t])/g,'');
//里面放置字符串
newArr.push(thisStr);
}
}
return newArr;
}
/**
*
* @param obj 对象
* @returns 将对象按照key值进行排序。
*/
function sortObject(obj){
var keyArr = [];
for(var item in obj){ //把所有的key放置在一个数组里面。
keyArr.push(item);
};
keyArr.sort(); //排序,按照字符进行排序。
var newObj = {}; //还是json对象
for(var i=0;i<keyArr.length;i++){
newObj[keyArr[i]] = obj[keyArr[i]]
}
//处理成 键=值的数组形式。
//console.log("值是:"+JSON.stringify(newObj));
return newObj;
}