JavaScript从不同层(深度树形数组)取需要的数据并统一return到新数组

数组:下面几种方法都用文章下面arr这个数组
主要是通过flat()函数来实现,对于非树形数组,比如多层嵌套,flat(params)可以通过调整参数直接扁平化层一维,对于树形数组通过一层层取
数组

      let arr = [
        {
          name: " John ",
          age: 20,
          address: {
            city: " New  York ",
            state: " NY ",
          },
          jobs: [
            {
              java: "20k",
              javascript: "18k",
              property:[
                {
                  num:12,
                  news:'aa'
                },
                {
                  num:13,
                  news:'bb'
                }
              ]
            },
            {
              java: "21k",
              javascript: "17k",
               property:[
                {
                  num:1211,
                  news:'cc'
                },
                {
                  num:1323,
                  news:'dd'
                }
              ],
            },
          ],
        },
        {
          name: " Jane ",
          age: 25,
          address: {
            city: " Los  Angeles ",
            state: " CA ",
          },
          jobs: [
            {
              java: "10k",
              javascript: "8k",
               property:[
                {
                  num:102,
                  news:'ee'
                },
                {
                  num:1003,
                  news:'ff'
                }
              ]
            },
            {
              java: "1k",
              javascript: "7k",
               property:[
                {
                  num:111,
                  news:'gg'
                },
                {
                  num:1113,
                  news:'hh'
                }
              ]
            },
          ],
        },
      ];

一层数组

      let result = arr.map((item) => {
        return {
          name: item.name,
          state: item.address.state,
        };
      });
      console.log(result,'测试取值=============');

两层数组

先用flat()展平然后再遍历 ps:数组的层级不单一比较复杂的情况下,可以借助参数 Infinity ,就可以将所有层级的数组展平

      let results = arr.map((item) => item.jobs).flat();
      let newArray = results.map((items) => ({ java: items.javascript }));
      console.log(newArray,'========newArray');

三层数组

1.展平再遍历

	  let flatresult = arr.map((item) => item.jobs).flat();
      let result = flatresult.map((item) => item.property).flat();
      let newArray3 = result.map((items) =>({num:items.num}))
      console.log(newArray3,'二次展平再遍历========');

2.直接遍历

      arr.forEach((item) => {
        item.jobs.forEach((item2) => {
          item2.property.forEach((item3) => {
            newArray2.push({
              num: item3.num,
            });
          });
        });
      });
      console.log(newArray2,'三层数组=================');
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吉吉安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值