工作中遇到了对复杂数组去重的需求 根据对象的insectName对数组去重 闲下来的时候 研究了一下
定义需要去重的数组 每一个job只要一个人
var arr = [
{ id: 1, name: '张三', job: '前端' },
{ id: 2, name: '李四', job: '前端' },
{ id: 3, name: '王五', job: 'java' },
{ id: 4, name: '赵六', job: '前端' },
{ id: 5, name: '孙七', job: 'java' },
{ id: 6, name: '周八', job: 'Gis' },
];
var newArr = []; //新数组
思路
//原生js实现
for (var i = 0; i < arr.length; i++) {
var unique = true;
if (newArr.length == 0) {
newArr.push(arr[i]);
continue;
}
for (var idx = 0; idx < newArr.length; idx++) {
if (newArr[idx].job == arr[i].job) {
unique = false;
continue;
}
}
unique ? newArr.push(arr[i]) : '';
}
// some改造1
for (var i = 0; i < arr.length; i++) {
var res = newArr.some((item) => {
// some再找到成立的项后会直接打断全部循环返回true
// some只要有一项为真 后面就全部不执行了 every是判断完每一项
return item.job == arr[i].job;
});
if (!res) {
newArr.push(arr[i]);
}
}
// some改造2
for (var i = 0; i < arr.length; i++) {
newArr.some((item) => item.job == arr[i].job) ? '' : newArr.push(arr[i]);
}
// 终极写法
arr.forEach((i) => {
newArr.some((item) => item.job == i.job) ? '' : newArr.push(i);
});