一、合并数组中对象id值相同的对象
function dedup (arr = []) {
const mp = {}
for (let obj of arr) {
const { id , value} = obj
if (mp[id]) {
mp[id].value.push(value)
} else {
mp[id] = {id, value: [value]}
}
}
return Object.values(mp)
}
const data = [{id: "1000001", value:[1.1, "1.1"]},
{id: "1000002", value:[2.1, "2.1"]},
{id: "1000001", value: [1.2, "1.2"]},
{id: "1000002", value:[2.2, "2.2"]},
{id: "1000001", value: [1.3, "1.3"]},
{id: "1000002", value:[2.3, "2.3"]},
]
console.log(dedup(data))
let selectMenu = [{id: '111'},{id:'311'},{id: '411'},{id:'412'}]
let menu = [
{
title: '$i18n.menu.home',//首页
// icon: require('./src/assets/images/menu_icon1.png'),
icon: 'menu_icon1',
path: '/home',
id: '111'
},
{
title: '$i18n.menu.fate',//联邦管理
// icon: require('./src/assets/images/menu_icon2.png'),
path: '/fate',
},
{
title: '$i18n.menu.monitoringStatistics',//监控统计
// icon: require('./src/assets/images/menu_icon3.png'),
icon: 'menu_icon3',
subMenu:[
{
title: '$i18n.menu.marketData',//市场数据
path: '/statistics/data',
id: '311'
},
{
title: '$i18n.menu.taskStatistics',//任务
path: '/statistics/task',
},
{
title: '$i18n.menu.serviceStatistics',//服务
path: '/statistics/service',
}
]
},
{
title: '$i18n.menu.user',//用户
// icon: require('./src/assets/images/menu_icon4.png'),
path: '/userAuth/user',
},
{
title: '$i18n.menu.userAuth',//用户与权限
icon: '用户与权限',
// icon: require('./src/assets/images/menu_icon3.png'),
subMenu:[
{
title: '$i18n.menu.user',//用户
path: '/userAuth/user',
id: '411'
},
{
title: '$i18n.menu.userAdmin',//用户管理
path: '/userAuth/userAdmin',
id: '412'
},
{
title: '$i18n.menu.authAdmin',//权限管理
path: '/userAuth/authAdmin',
}
]
},
];
let arrSelect = [];
let endMenu = menu;
selectMenu.forEach(element => {
// console.log(element);
menu.forEach(menuItem => {
if (element.id == menuItem.id){
// console.log(menuItem,'一级')
arrSelect.push(menuItem)
}
if (menuItem.subMenu){
// let subMenuS = []
let subMenu = []
let parentMenu = [];
menuItem.subMenu.forEach(submenuItem => {
if (element.id == submenuItem.id){
parentMenu = {
title: menuItem.title,
icon: menuItem.icon
}
console.log(subMenu,'------erji')
subMenu.push(submenuItem)
parentMenu['subMenu'] = subMenu;
console.log(parentMenu)
arrSelect.push(parentMenu) ;
}
});
}
});
});
console.log(arrSelect,'最终')
function dedupfn (arr = []) {
const mp = {}
for (let obj of arr) {
const { id,title,icon,path , subMenu} = obj
if (mp[title]) {
mp[title].subMenu.push(subMenu)
} else {
if(subMenu){
mp[title] = {title,icon, subMenu: [subMenu]}
} else {
mp[title] = {id,title,icon,path}
}
}
}
return Object.values(mp)
}
console.log(dedupfn(arrSelect),'合并后')
不知道第二个代码块有木有优化方案
2、数组和对象合并
var selectedArr = ["张三", "马六",'麻醉'];
var obj = [
{value: '张三',selected:false, type:'1' },
{value: '李四',selected:false},
{value: '马六',selected:false},
{value: '王子',selected:false},
{value: '哈哈',selected:false, type:'1'}
];
let arr = obj.map(item => {
return item.value;
})
selectedArr.forEach(item => {
if(arr.includes(item)) {
let index = arr.indexOf(item)
obj[index].selected = true;
} else {
obj.push({"selected": true,'value': item})
}
})
console.log(obj)