JS 数据格式转换问题

请问如何用js 把 ["A01","A01-1", "A01-2", "A01-3", "A02", "A02-1"]
(可能还有A03 A03-1 A03-2 A04 A04-1)等等等转换为

       [
        {menuId:"A01",subId:"1,2,3"},
        {menuId:"A02",subId:"1"}
       ]

这样的格式(subId对应的是menuId后面的数字 我说不清楚 抱歉)
请求前端大神帮忙看下

阅读 2.5k
4 个回答
function getMenus(data) {
    return Object.entries(data.reduce((res, v) => {
        var [menuId, subId] = v.split('-');
        if(!res[menuId]) res[menuId] = new Set(); // 没有重复的话可以直接使用数组
        if(subId) res[menuId].add(subId)
        return res;
    },{})).map(([menuId, subIds]) => ({menuId, subId: [...subIds].join()}))
}

image.png

["A01","A01-1", "A01-2", "A01-3", "A02", "A02-1"].reduce((s, n)=>{
    var [menuId, subId] = n.split('-');
//     console.log(menuId, subId)
    if(!menuId || !subId) return s
    if(!s.hash[menuId]){
        s.hash[menuId] = {menuId,subId}
        s.arr.push(s.hash[menuId])
    }else{
        s.hash[menuId].subId += `,${subId}`
    }
    return s
}, {
    hash: {},
    arr:[]
})
var x = ["A01","A01-1", "A01-2", "A01-3", "A02", "A02-1"];
var temp = {};
x.map(function(item) {
    var splitedItems = item.split('-');
    if (!temp[splitedItems[0]]) {
        temp[splitedItems[0]] = [];
    }
    if (splitedItems[1]) {
        temp[splitedItems[0]].push(splitedItems[1]);
    }
});
var results = Object.entries(temp).map(function(item) {
    return {menuId: item[0],subId: item[1].join(',')};
});
console.log(results);

image.png

arr.reduce((s, v) => (v.split('-').length === 1 ? s.push({menuId: v, subId: []}) : s[s.length - 1].subId.push(v.split('-')[1]), s), []).map(({menuId, subId}) => ({menuId, subId: subId.join(',')}))

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题