大致思路:
- 在对象内部,对属性排序
- 将对象数组利用JSON.stringfy()转为字符串数组
- 将数组内的字符串挨个与temp进行比较,不等则将该字符串push进新数组,并将该字符串赋值给temp。相等则比较下一个字符串
- 将3得到的字符串数组,利用JSON.pase()将字符串解析为对象,然后push进一个空数组
代码如下:
function objectArraySort(oa){
var newObj=objectKeySort(oa);//将对象数组中对象内部排序
var aar=[]
var temp
var aab=[]
var earr=[]
for(var ii of newObj){ //将对象数组转为字符串数组
aar.push(JSON.stringify(ii))
}
for(var aa=0;aa<aar.length;aa++){ //将排序后的字符串数组,前后相比较。将不同的push进新数组
if(aar[aa]!==temp){
temp=aar[aa]
aab.push(temp)
}
}
for(ai of aab){ //将去重后的字符串数组重新解析为对象
earr.push(JSON.parse(ai))
}
return earr
}
function objectKeySort(oa){//将对象数组中对象内部排序
var newArr=[]
for(var item of oa){
var arrKey=[]
var nobj={}
for(var key in item){
arrKey.push(key)
}
arrKey.sort()
for(var i=0;i<arrKey.length;i++){
nobj[arrKey[i]]=item[arrKey[i]]
}
newArr.push(nobj)
}
return newArr
}
var oba=[
{id:2,name:'ad',aa:'ff'},
{name:'ad',aa:'ff',id:2},
{aa:'fdf',name:'ad',id:2},
{aa:'fdf',name:'ad',id:2,ag:'jk'}
]
console.log( objectArraySort(oba))
结果如下: