【问题标题】:Add child objects to array of objects after parents object in JavaScript在 JavaScript 中的父对象之后将子对象添加到对象数组中
【发布时间】:2020-05-09 12:58:57
【问题描述】:

我确信有很多方法可以实现这一目标,但我正在寻找好的变体。 我有一个带有 child 对象数组的对象数组。我想要循环更改对象。具有 child 对象数组的对象将此子对象添加到具有索引 2 的同一级别的父对象旁边,但不会删除任何对象。

(63) [{…},
    1:
    PartImage: null
    Qty: 3
    Desc: null
    reference: 2
    child: [{…}]
    id: 49
    notes: ""
    2:
    PartImage: null
    Qty: 3
    Desc: null
    reference: 2
    id: 50
    notes: ""

【问题讨论】:

    标签: javascript arrays object add


    【解决方案1】:

    您可以使用递归并实现一些遍历功能来遍历数据的节点并将它们减少到一个级别

    let data = [
       {
          id: 49,
          child: [
             {
                id: 55
             }
          ]
       },
       {
          id: 50
       }      
    ]
    
    function reorderData(node)
    {
       (function traverse(node, root)
       {
          if (Array.isArray(node))
             node.forEach(n => traverse(n, root))
          else if (node.child) {
             node.child.forEach(item => data.splice(data.indexOf(node)+1, 0, item))
             delete node.child
          }      
       })(node, node)
    }
    
    reorderData(data)
    console.log(data)
    

    【讨论】:

    • YGilk1,感谢您的回答。如何为我实现遍历功能?什么是节点,根?如何与 my_obj 一起使用 this.traverse (my_obj );
    • 对我来说问题是 id: 55 应该是结果中的第二个元素,而不是最后。所有子元素都应该在父元素之后。
    • 答案已编辑以满足您的需求。我用 splice() 替换了 push()(在末尾插入),您可以在其中设置插入位置。
    • 我重新设计了遍历算法,让您更容易在代码中实现。以相同的方式创建一个 reorderData 函数,并以您的数据作为参数调用它。返回后,您的数据应该按照您想要的方式重新排序。
    • YGilk1,非常感谢。是的,这个解决方案适合我。你节省了我的时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 2010-12-17
    • 2012-03-11
    • 1970-01-01
    相关资源
    最近更新 更多