从多级对象数组重新分配值

时间:2015-07-29 07:13:24

标签: javascript arrays object frontend

我有一个像这样的对象数组:

[
  {
    "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(我确定是)

2 个答案:

答案 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);