根据数组的某一属性去重
方法1:
unique(arr) {
const res = new Map();
return arr.filter((a) => !res.has(a.id) && res.set(a.id, 1));
},
方法2:
let data = [
{id:1,name:'obj'},
{id:3,name:'string'},
{id:2,name:'arr'},
{id:1,name:'num'}
];
let hash = {};
data = data.reduce(function(arr, current) {
hash[current.id] ? '' : hash[current.id] = true && arr.push(current);
return arr
}, []);
console.log(data)
拓展:
js sort方法根据数组中对象的某一个属性值进行排序
var arr = [{name:'zopp',age:0},{name:'gpp',age:18},{name:'yjj',age:8}];
function compare(property){
return function(a,b){
var value1 = a[property];
var value2 = b[property];
return value1 - value2;
}
}
console.log(arr.sort(compare('age')))
如何根据参数不同,来确定是升序排列,还是降序排序呢?
/* 数组根据数组对象中的某个属性值进行排序的方法 使用例子:newArray.sort(sortBy('number',false)) //表示根据number属性降序排列;若第二个参数不传递,默认表示升序排序
- @param attr 排序的属性 如number属性
- @param rev true表示升序排列,false降序排序* */
sortBy: function(attr,rev){
//第二个参数没有传递 默认升序排列
if(rev == undefined){
rev = 1;
} else {
rev = (rev) ? 1 : -1;
}
return function(a,b){
a = a[attr];
b = b[attr];
if(a < b){
return rev * -1;
}if(a > b){
return rev * 1;
}return 0;
}
}