为了账号安全,请及时绑定邮箱和手机立即绑定

根据父元素类型格式化json

根据父元素类型格式化json

跃然一笑 2021-12-12 10:59:47
我有一个 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      }    }
查看完整描述

2 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

您可以使用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++) {

  if (array[i].type === 1) {

    if (parent) {

      parent.child = children;

      result.push(Object.assign(parent));

      children = [];

    }

    parent = Object.assign(array[i]);

    continue;

  }


  children.push(Object.assign(array[i]));

}


if (parent) {

  parent.child = children;

  result.push(Object.assign(parent));

}


console.log(result);


查看完整回答
反对 回复 2021-12-12
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

为此,您可以使用各种方法。例如,最详细的是使用循环(不确定它是否真的有效,没有运行它,请视为伪代码):


const result = [];

let parent;

array.forEach(element => {

  if (element.type === 1) {

     parent = element;

     parent.children = [];

     result.push(element);


     return;

   }

   parent.children.push(element);

})


我最担心的是,您的问题听起来像是您尝试执行的任务有问题。我不知道背景,因为你的帖子很抽象,但我怀疑你试图解决一个可以用更简单的方式解决的问题。


我们,程序员通常会修复出现在我们脑海中的第一个解决方案,并且如果该解决方案并不真正有效或脆弱,则犹豫退后并重新考虑整个问题以找到更合适的解决方案。


我希望我以任何方式提供帮助。


查看完整回答
反对 回复 2021-12-12
  • 2 回答
  • 0 关注
  • 272 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号