在 javascript 中重组 JSON 文件
Restructuring a JSON file in javascript
我有一个名为 'from' 的 JSON,我想将其转换为 'to',如下所示。实现它的最快和最有效的方法是什么?是否可以一步完成,还是我应该先减少重复项?:
const from =[{
NUM: '1234001',
SUBNUM: '001'},
{
NUM: '1234001',
SUBNUM: '001'},
{
NUM: '1234002',
SUBNUM: '002'},
{
NUM: '1234005',
SUBNUM: '005'},
{
NUM: '4567001',
SUBNUM: '001'},
{
NUM: '9999001',
SUBNUM: '001'}
];
const to = [{
label: 'SUBNUM',
submenu: [{
label: '1234',
role: '1234',
submenu: [{
label: '001',
role: '001'
},
{
label: '002',
role: '002'
},
{
label: '005',
role: '005'
}]
},{
label: '4567',
role: '4567',
submenu: [{
label: '001',
role: '001'
}]
},{
label: '9999',
role: '9999',
submenu: [{
label: '001',
role: '001'
}]
}
]}];
您可以试试下面的代码:
let items = [];
from.forEach(obj => {
let numTruncated = obj.NUM.replace(obj.SUBNUM, "");
let currentNum = items.find(n => n.label === numTruncated);
if(!currentNum ) {
currentNum = {
label: numTruncated,
role: numTruncated,
submenu: []
};
items.push(currentNum );
}
if(!currentNum .submenu.find(item => item.label === obj.SUBNUM)){
currentNum .submenu.push({ label: obj.SUBNUM, role: obj.SUBNUM });
}
});
let output = { label: "SUBNUM", submenu: items };
find
returns undefined
如果没有匹配指定箭头函数的元素,使用字符串原型中的 replace
去掉 SUBNUM
我有一个名为 'from' 的 JSON,我想将其转换为 'to',如下所示。实现它的最快和最有效的方法是什么?是否可以一步完成,还是我应该先减少重复项?:
const from =[{
NUM: '1234001',
SUBNUM: '001'},
{
NUM: '1234001',
SUBNUM: '001'},
{
NUM: '1234002',
SUBNUM: '002'},
{
NUM: '1234005',
SUBNUM: '005'},
{
NUM: '4567001',
SUBNUM: '001'},
{
NUM: '9999001',
SUBNUM: '001'}
];
const to = [{
label: 'SUBNUM',
submenu: [{
label: '1234',
role: '1234',
submenu: [{
label: '001',
role: '001'
},
{
label: '002',
role: '002'
},
{
label: '005',
role: '005'
}]
},{
label: '4567',
role: '4567',
submenu: [{
label: '001',
role: '001'
}]
},{
label: '9999',
role: '9999',
submenu: [{
label: '001',
role: '001'
}]
}
]}];
您可以试试下面的代码:
let items = [];
from.forEach(obj => {
let numTruncated = obj.NUM.replace(obj.SUBNUM, "");
let currentNum = items.find(n => n.label === numTruncated);
if(!currentNum ) {
currentNum = {
label: numTruncated,
role: numTruncated,
submenu: []
};
items.push(currentNum );
}
if(!currentNum .submenu.find(item => item.label === obj.SUBNUM)){
currentNum .submenu.push({ label: obj.SUBNUM, role: obj.SUBNUM });
}
});
let output = { label: "SUBNUM", submenu: items };
find
returns undefined
如果没有匹配指定箭头函数的元素,使用字符串原型中的 replace
去掉 SUBNUM