之前
之后
主要就是根据对象数组中的属性值,对数组进行分类,并且将相同属性值只保留一个。
主要方法是根据 这位博主的代码
由于该博主没有进行注解,我对它进行了注释。
const groupBy = (array, f) => {
let groups = {};
array.forEach(function (o) {
var group = JSON.stringify(f(o));
groups[group] = groups[group] || [];
groups[group].push(o);
});
return Object.keys(groups).map(function (group) {
return groups[group];
});
};
const arrayGroupBy = (list, groupId) => {
let sorted = groupBy(list, function (item) {
return [item[groupId]];
});
return sorted;
};
let newSortList = arrayGroupBy(res.data, 'typeName')//typeName就是进行分类的属性值。
newSortList.map(item => {
let tempName = item[0].typeName
item.map(item => {
item.typeName = null
})
item[0].typeName = tempName
})
首先是调用函数,这里的‘typeName’就是进行分类的属性值。res.data就是要进行分类的对象数组。
let newSortList = arrayGroupBy(res.data, 'typeName')
进入arrayGroupBy内,goupId就是我们要分类的属性值。然后向groupBy传入了一个函数,
该函数就是提取出数组中每个对象中的我们要分类的那个属性值
const arrayGroupBy = (list, groupId) => {
let sorted = groupBy(list, function (item) {
return [item[groupId]];
});
return sorted;
};
这里的array还是原数组,f是一个函数,在arrayGroupBy进行传入的。
const groupBy = (array, f) => {
let groups = {};
array.forEach(function (o) {
var group = JSON.stringify(f(o));
groups[group] = groups[group] || [];
groups[group].push(o);
});
return Object.keys(groups).map(function (group) {
return groups[group];
});
};
这一步就是获取这对象中的typeName 的值。
var group = JSON.stringify(f(o));
第一步是判断 是否已经存在这个分组,若已存在就不变,若不存在就为空数组。
第二步就是往该数组进行一个添加。
groups[group] = groups[group] || [];
groups[group].push(o);
遍历完之后,groups就变成了数组对象,每个属性值就是我们要分类的组。
Object.keys()用于遍历对象的属性值。搭配map就可以遍历该属性值下的数组。
Object.keys(groups).map(function (group) {
return groups[group];
});
最终返回回来的就是一个数组。每个索引下的typeName都是一样的。
下面的方法就是我手写的,比较菜。
newSortList.map(item => {
let tempName = item[0].typeName
item.map(item => {
item.typeName = null
})
item[0].typeName = tempName
})
利用map函数遍历数组下的4个数组,利用tempName保存子数组下的第一个typeName。然后再遍历子数组,让该数组下所有的typeName变成null。
最后在将tempName赋给数组的第一个值。