【问题标题】:Javascript - Nested parent/child array recursive function that flattens parent onlyJavascript - 嵌套父/子数组递归函数,仅展平父
【发布时间】:2017-08-10 09:07:34
【问题描述】:

我有一个多维嵌套的父/子数组如下:

{
  parent: {
     name: "foo"
  },
  children: [
    {
      parent: {
         name: "asdf",
      },
      children: []
    },
    {
     parent: {},
     children: []
    },
    {
     parent: {},
     children: []
    },
    ...
  ]
}

我想要做的是在这个数组上应用一个递归函数,只展平父属性并保持子属性不变,以便得到这样的东西:

 {
  name: "foo",
  children: [
    {
      name: "asdf",
      children: []
    },
    {
     children: []
    },
    {
     children: []
    },
    ...
  ]
}

我尝试使用 underscore.js,但找不到可以解决问题的递归函数。有什么想法吗?

【问题讨论】:

  • 里面有数组吗?可能是给孩子的?
  • 是的 children 是一个数组。我已经编辑了我的问题,谢谢你的评论!

标签: javascript recursion underscore.js


【解决方案1】:

您可以通过迭代数组并更新所需属性来使用迭代和递归方法。

如果找到一个孩子,再次迭代。

var array = [{ parent: { name: 'a', surname: 'b', }, children: [{ parent: { name: 'c', surname: 'd', }, children: [{ parent: { name: 'e', surname: 'f' } }], childrenName: 'v', childrenSurname: 'w' }], childrenName: 'x', childrenSurname: 'y' }];

array.forEach(function iter(object) {
    if (object.parent) {
        object.name = object.parent.name;
        object.surname = object.parent.surname;
        delete object.parent;
    }
    object.children && object.children.forEach(iter);
});

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 谢谢!像魅力一样工作!
【解决方案2】:

希望这个recurse 功能是您所需要的

const recurse = (data) => {
    for(let i = 0, l = data.length; i < l; i++){
        if(data[i]['parent']){
            data[i]['name'] = data[i]['parent']['name']
            delete data[i]['parent']
        }
        if(data[i]['children']) recurse(data[i]['children'])
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-07
    • 1970-01-01
    • 2015-08-15
    • 2018-05-28
    • 2015-02-02
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    相关资源
    最近更新 更多