我有一个像这样的对象数组:
[
{
"pageId": "1",
"menuPos": "Parent",
"mainPageId": "1",
"subMenu": [
{
"pageId": "1",
"menuPos": "Parent and child",
"mainPageId": "1",
"subMenu": [
{
"pageId": "67",
"menuPos": "Child",
"mainPageId": "67"
},
{
"pageId": "68",
"menuPos": "Child and paren",
"mainPageId": "68",
"subMenu": [
{
"pageId": "70",
"menuPos": "Child",
"mainPageId": "70"
},
{
"pageId": "69",
"menuPos": "Child",
"mainPageId": "69"
}
]
}
]
}
]
}
]
感谢来自stackoverlow的tymeJV现在我知道如何通过这个数组进行迭代,但我仍然在研究如何将数组中的值重新分配给另一个数组。我为此做了一个递归函数,但在输出中我仍然有相同的值。这是代码。
currentData = event.dest.nodesScope。$ treeScope.data;
var outputData = [];
function iterateMenus(menu) {
if(menu.length > 0) {
outputData = [];
for (var i = 0; i < menu.length; i++) {
console.log(menu[i].pageId+" "+menu[i].menuPos);
outputData[i] = {
menuPos: menu[i].menuPos,
pageId: menu[i].pageId,
subMenu: [ iterateMenus(menu[i].subMenu) ]
}
}
}
return outputData;
}
var output = iterateMenus(currentData);
在输出中我想只显示pageId,menuPos和subMenu(如果存在)。如果可能的话,我也想添加parentId(我确定是)
答案 0 :(得分:0)
push只有您希望对象数组处理的值
function iterateMenus(menus) {
var outputData = [];
if (menus && menus.length > 0) {
for (var i = 0; i < menus.length; i++) {
var menu = menus[i];
console.log(menu.pageId + " " + menu.menuPos);
//check if exist
if (menu.pageId || menu.menuPos || menu.subMenu) {
var object = {
menuPos: menu.menuPos,
pageId: menu.pageId,
subMenu: [iterateMenus(menu.subMenu)]
};
outputData.push(object);
}
}
}
return outputData;
}
答案 1 :(得分:0)
使用@yesterdaysfoe我完成了我想要的功能。我还添加了一个parentId参数,现在它看起来像这样:
currentData = event.dest.nodesScope.$treeScope.data;
var outputData = [];
function iterateMenus(menus, parent) {
var outputData = [];
if (menus && menus.length > 0) {
for (var i = 0; i < menus.length; i++) {
var menu = menus[i];
console.log(menu.pageId + " " + menu.menuPos);
//check if exist
if (menu.pageId || menu.menuPos || menu.subMenu) {
var object = {
menuPos: menu.menuPos,
pageId: menu.pageId,
newOrder: i,
parentId: parent,
subMenu: [iterateMenus(menu.subMenu, menu.pageId)]
};
outputData.push(object);
}
}
}
return outputData;
}
var output = iterateMenus(currentData);