根据父元素类型格式化json

我有一个 JSON,我需要所有与类型 1 不同的人都在类型 1 下方成为类型 1 的孩子


也就是说,如果它不同于 1 并且正好低于类型 1,则该值必须成为类型 1 的嵌套对象


例子


array = [

  {

    name: 'name1',

    type: 1

  },

  {

    name: 'name2',

    type: 2

  },

  {

    name: 'name3',

    type: 3

  },

  {

    name: 'name4',

    type: 1

  },

  {

    name: 'name5',

    type: 2

  },

]

数组应该变成下面这样。


arrayFormated = [

  {

    name: 'name1',

    type: 1

    child: [

      {

        name: 'name2',

        type: 2

      },

      {

        name: 'name3',

        type: 3

      }

    ]

  },


  {

    name: 'name4',

    type: 1,

    child: [{

      name: 'name5',

      type: 2

    }]

  },

]

我尝试使用地图


  this.formatedArray = array.map((x, index) => {

    if (x.type !== 1) {

      return {

        name: x.name

        type: x.type

      }

    }


跃然一笑
浏览 273回答 2
2回答

噜噜哒

您可以使用for循环对数组进行迭代,如果项目的typeis 1,则可以将其分配给parent。然后继续向children数组追加其他元素,直到再次遇到带有typeof的项目1。然后将子项作为child属性添加到parent对象并将结果推送到新数组。let array = [{ name: 'name1', type: 1 }, { name: 'name2', type: 2 }, { name: 'name3', type: 3 }, { name: 'name4', type: 1 }, { name: 'name5', type: 2 }, ];let result = [];let parent = null;let children = [];for (let i = 0; i < array.length; i++) {&nbsp; if (array[i].type === 1) {&nbsp; &nbsp; if (parent) {&nbsp; &nbsp; &nbsp; parent.child = children;&nbsp; &nbsp; &nbsp; result.push(Object.assign(parent));&nbsp; &nbsp; &nbsp; children = [];&nbsp; &nbsp; }&nbsp; &nbsp; parent = Object.assign(array[i]);&nbsp; &nbsp; continue;&nbsp; }&nbsp; children.push(Object.assign(array[i]));}if (parent) {&nbsp; parent.child = children;&nbsp; result.push(Object.assign(parent));}console.log(result);

繁花不似锦

为此,您可以使用各种方法。例如,最详细的是使用循环(不确定它是否真的有效,没有运行它,请视为伪代码):const result = [];let parent;array.forEach(element => {&nbsp; if (element.type === 1) {&nbsp; &nbsp; &nbsp;parent = element;&nbsp; &nbsp; &nbsp;parent.children = [];&nbsp; &nbsp; &nbsp;result.push(element);&nbsp; &nbsp; &nbsp;return;&nbsp; &nbsp;}&nbsp; &nbsp;parent.children.push(element);})我最担心的是,您的问题听起来像是您尝试执行的任务有问题。我不知道背景,因为你的帖子很抽象,但我怀疑你试图解决一个可以用更简单的方式解决的问题。我们,程序员通常会修复出现在我们脑海中的第一个解决方案,并且如果该解决方案并不真正有效或脆弱,则犹豫退后并重新考虑整个问题以找到更合适的解决方案。我希望我以任何方式提供帮助。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript