1 回答

TA贡献1856条经验 获得超11个赞
这是另一个解决方案reduce:
const menuConfig = [{
ID: 1,TAG: "M:A", PARENT_TAG: "MAIN", TITLE: "A Title"
}, {
ID: 2, TAG: "AS1", PARENT_TAG: "M:A", TITLE: "A Subtitle 1"
}, {
ID: 3, TAG: "AS2", PARENT_TAG: "M:A", TITLE: "A Subtitle 2"
}, {
ID: 4, TAG: "AS3", PARENT_TAG: "M:A", TITLE: "A Subtitle 3"
}, {
ID: 5, TAG: "M:B", PARENT_TAG: "MAIN", TITLE: "B Title"
}, {
ID: 6, TAG: "BS1", PARENT_TAG: "M:B", TITLE: "B Subtitle 1"
}, {
ID: 7, TAG: "BS2", PARENT_TAG: "M:B", TITLE: "B Subtitle 2"
}, {
ID: 8, TAG: "M:C", PARENT_TAG: "MAIN", TITLE: "C Title"
}, {
ID: 8, TAG: "CS1", PARENT_TAG: "M:C", TITLE: "C Subtitle 1"
}]
function getMenu() {
const menu = getItems(menuConfig, 'MAIN');
console.log(menu);
}
function getItems(items, grandParentTag) {
const newItems = items.reduce((modifiedObj, currentItem) => {
const parentTag = currentItem.PARENT_TAG;
const tag = currentItem.TAG;
if (!modifiedObj[grandParentTag]) {
modifiedObj[parentTag] = {};
}
if (!modifiedObj[grandParentTag][parentTag]) {
modifiedObj[parentTag][tag] = {
title: currentItem.TITLE,
subMenu: [],
};
} else {
modifiedObj[grandParentTag][parentTag].subMenu.push({
title: currentItem.TITLE,
});
}
return modifiedObj;
}, {});
return Object.values(newItems[grandParentTag]);
}
getMenu();
添加回答
举报