首页 > 解决方案 > Javascript:合并对象的笛卡尔数组

问题描述

我有以下对象数组

{
 "roleid":[{"rolename":[1639]}],
 "modnameid":[{"mname":[1516,1515,1514]}],
 "accesstype":[{"accesstype":["VO","AA"]}]
}

我想把它转换成下面的格式

[
{"modnameid":1516,"accesstype":"VO","roleid":1639},
{"modnameid":1516,"accesstype":"AA","roleid":1639},
{"modnameid":1515,"accesstype":"VO","roleid":1639},
{"modnameid":1515,"accesstype":"AA","roleid":1639},
{"modnameid":1514,"accesstype":"VO","roleid":1639},
{"modnameid":1514,"accesstype":"AA","roleid":1639}
]

我们该怎么做,基本假设是什么基于多层地图的操作,深思援助感谢!

标签: javascriptarraysecmascript-6array-mergecartesian-product

解决方案


可以用户

let data = {
    "roleid": [{ "rolename": [1639] }],
    "modnameid": [{ "mname": [1516, 1515, 1514] }],
    "accesstype": [{ "accesstype": ["VO", "AA"] }]
}
let roles = []
data.roleid.forEach(element => {
    roles = [...roles, ...element.rolename]
});

let names = []
data.modnameid.forEach(element => {
    names = [...names, ...element.mname]
});

let types = []
data.accesstype.forEach(element => {
    types = [...types, ...element.accesstype]
});

let informations = []
roles.forEach(role => {
    names.forEach(name => {
        types.forEach(type => {
            informations.push({ "modnameid": role, "accesstype": type, "roleid": name })
        });
    });
});

console.log(informations);


推荐阅读