简单的js数组去重
var test1 = [1,2,3,4,1,2,'mama'];
Array.prototype.unique1 = function()
{var temp = []; // 一个新的临时数组
//排序sort();
this.sort(function(a,b){
return b-a});
for(var i = 0; i < this.length; i++) // 遍历当前数组
{
//判断是否临时数组中有该遍历的元素存在
if (temp.indexOf(this[i]) == -1) {
temp.push(this[i]); // 若不存在,则push到临时数组里面
}
}
return temp;
}
console.log('数组排序+去重的实现'+test1.unique1());
数组对象去重
const data = [
{ atc_id: 1, atc_name: '文章1', atc_label: 'jquery' },
{ atc_id: 1, atc_name: '文章1', atc_label: 'javascript' },
{ atc_id: 2, atc_name: '文章2', atc_label: 'jquery' },
{ atc_id: 3, atc_name: '文章2', atc_label: 'javascript' },
];
uniqueObj(objArray) {
const result = [];// 去重后返回的结果数组
const temp = {};// 临时对象
// 将对象数组中每一项的atc_id值作为属性,若temp不拥有此属性时则为temp添加此属性且将其值赋为true,并将这一项push到结果数组中
for (let i = 0; i < objArray.length; i++) {
const atc_id = objArray[i].atc_id;
if (temp[atc_id]) { // 如果temp中已经存在此属性名,则说明遇到重复项
continue;// 不继续执行接下来的代码,跳转至循环开头
}
temp[atc_id] = true;// 为temp添加此属性(atc_id)且将其值赋为true
result.push(objArray[i]); // 将这一项复制到结果数组result中去
}
return result;
}
console.log('uniqueObj(data)', uniqueObj(data));
拓展知识:
由于上面的数据是在数据库中通过多表查询出来的,所以出现了相同atc_id,不同atc_label(标签)的文章
我的目标是拿到唯一的文章和该文章对应的一个或多个标签(atc_label);像下图这样:
const data = [
{ atc_id: 1, atc_name: '文章1', atc_label: 'jquery' },
{ atc_id: 1, atc_name: '文章1', atc_label: 'javascript' },
{ atc_id: 2, atc_name: '文章2', atc_label: 'jquery' },
{ atc_id: 3, atc_name: '文章2', atc_label: 'javascript' },
];
uniqueObj(objArray) {
const result = [];// 去重后返回的结果数组
const temp = {};// 临时对象
// 将对象数组中每一项的atc_id值作为属性,若temp不拥有此属性时则为temp添加此属性且将其值赋为true,并将这一项push到结果数组中
for (let i = 0; i < objArray.length; i++) {
const atc_id = objArray[i].atc_id;
if (temp[atc_id]) { // 如果temp中已经存在此属性名,则说明遇到重复项
continue;// 不继续执行接下来的代码,跳转至循环开头
}
temp[atc_id] = true;// 为temp添加此属性(atc_id)且将其值赋为true
result.push(objArray[i]); // 将这一项复制到结果数组result中去
}
return result;
}
const temp = uniqueObj(data);
temp.forEach(item1 => {
const labelList = [];
data.forEach(item2 => {
if (item1.atc_id === item2.atc_id) {
labelList.push(item2.atc_label);// lb_name
}
item1.labelList = labelList;
});
});
console.log('temp2', temp);