1. lodash里面的方法 uniqBy : 根据对象的某个字段进行去重
_.uniqBy([2.1, 1.2, 2.3], Math.floor);
// => [2.1, 1.2]
// The `_.property` iteratee shorthand.
_.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
// => [{ 'x': 1 }, { 'x': 2 }]
2. 处理菜单的数据类型,获取所有的子菜单数组。
getChildMenu(menus: MenuInfo[]) {
menus.forEach(item => {
if (item.children) {
this.getChildMenu(item.children);
} else {
this.childMenus.push(item);
}
});
return this.childMenus;
}
3. 数组对象根据某个值相同合并分组
原文链接:数组对象根据某个值相同合并分组_新白的博客-CSDN博客
var arr = [
{"id":"1001","name":"值1","value":"111"},
{"id":"1001","name":"值1","value":"11111"},
{"id":"1002","name":"值2","value":"25462"},
{"id":"1002","name":"值2","value":"23131"},
{"id":"1002","name":"值2","value":"2315432"},
{"id":"1003","name":"值3","value":"333333"}
];
var map = {},
dest = [];
for(var i = 0; i < arr.length; i++){
var ai = arr[i];
if(!map[ai.id]){
dest.push({
id: ai.id,
/*name: ai.name,*/
data: [ai]
});
map[ai.id] = ai;
}else{
for(var j = 0; j < dest.length; j++){
var dj = dest[j];
if(dj.id == ai.id){
dj.data.push(ai);
break;
}
}
}
}
console.log(dest);
延申效果:
// 对所有的数组对象中,根据accountCode进行分组
getBankStatementData(arr: UploadAccountEdit[]) {
const mapValue = {};
const value = [];
for (const firstValue of arr) {
if (!mapValue[firstValue.accountCode]) {
value.push({
accountCode: firstValue.accountCode,
accountName: firstValue.accountName,
bankName: firstValue.bankName,
currency: firstValue.currency,
fileList: [firstValue.fileList[0]],
});
mapValue[firstValue.accountCode] = firstValue;
} else {
for (const secondValue of value) {
if (secondValue.accountCode === firstValue.accountCode) {
secondValue.fileList.push(firstValue.fileList[0]);
break;
}
}
}
}
return value;
}
函数封装:
//arr为传入函数的目标数组,根据传入的key重组数组
function filterData(key,arr){
let map = {},
dest = [];
for(var i = 0; i < arr.length; i++){
var ai = arr[i];
if(!map[ai[key]]){
dest.push({
[key]: ai[key],
data: [ai]
});
map[ai[key]] = ai;
}else{
for(var j = 0; j < dest.length; j++){
var dj = dest[j];
if(dj[key] == ai[key]){
dj.data.push(ai);
break;
}
}
}
}
console.log(dest);
}