js数组对象合并等常用方法

一、合并数组中对象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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JavaScript中数组对象都有一些常用方法。 1. 数组方法: - Array.unshift(): 将一个或多个元素添加到数组的开头,并返回数组。这会改变数组的长度。 - Array.isArray(): 用来判断一个对象是否为数组。如果是数组则返回true,否则返回false。 - Array.push(): 将一个或多个元素添加到数组的末尾,并返回新的数组长度。 - Array.pop(): 删除数组的最后一个元素,并返回被删除的元素。这会改变数组的长度。 - Array.shift(): 删除数组的第一个元素,并返回被删除的元素。这会改变数组的长度。 - Array.concat(): 将多个数组合并成一个新的数组。 - Array.toString(): 将数组转换为字符串形式。 - Array.join(): 将数组转换为字符串形式,可以设置元素之间的间隔。 - Array.splice(start, deleteCount, item): 在指定位置对数组进行增、删、改操作。可以删除数组中的元素、添加新的元素或替换数组中的元素。 - Array.slice(start, end): 返回指定起始下标到结束下标之间的子数组,原数组不受影响。 2. 对象方法: - Object.keys(): 返回一个由对象的所有可枚举属性组成的数组。 - Object.values(): 返回一个由对象的所有可枚举属性值组成的数组。 - Object.entries(): 返回一个由对象的所有可枚举属性键值对组成的数组。 - Object.assign(target, ...sources): 用于将一个或多个源对象的所有可枚举属性复制到目标对象。 以上是一些常用数组对象方法,可以根据需要选择合适的方法进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [常用js数组方法对象方法](https://blog.csdn.net/qq_44890872/article/details/103324937)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值