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

数组连接问题

数组连接问题

哔哔one 2022-07-08 18:03:42
我有下一个代码:let arr = [{    id: 1,    name: 'test',    cars: [{        nr: [5, 4]      },      {        nr: [2]      },      {        nr: [1]      },      {        nr: [5, 4]      }    ],  },  {    id: 2,    name: 'test2',    cars: [{        nr: [5, 4]      },      {        nr: [2]      },      {        nr: [8]      },      {        nr: [5, 4]      }    ],  }]const res = arr.reduce(i => i.cars).map(i => i.nr.map(i => [].concat(i)))console.log(res)因此,我期望一个数组连接来自nr. 例如,结果我应该得到 2 个数组。一为id1,一为id2。第一个数组应该是这样的:[5,4,2,1,5,4],第二个应该实现相同的逻辑。为此,我制作: const res = arr.reduce(i => i.cars).map(i=> i.nr.map(i =>[].concat(i))),但它不起作用。何能得到预期的结果?
查看完整描述

3 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

您希望首先映射所有元素并通过 reduce 函数获取汽车 ID 数组。


const res = arr.map(({ cars }) => cars.reduce((acc, { nr }) => [...acc, ...nr], [])));


res; // =>  [ [ 5, 4, 2, 1, 5, 4 ], [ 5, 4, 2, 8, 5, 4 ] ]

让我知道这是否足够清楚或者您有任何问题!


查看完整回答
反对 回复 2022-07-08
?
三国纷争

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

您可以使用which 将与onmap一起返回一个新数组。在 reduce 回调中,您可以将当前. SInce concat 返回一个新数组,因此将值重新分配给累加器reducecarsconcatnr


编辑:使用另一个reduce函数来添加值


let arr = [{

    id: 1,

    name: 'test',

    cars: [{

        nr: [5, 4]

      },

      {

        nr: [2]


      },

      {

        nr: [1]


      },

      {

        nr: [5, 4]

      }

    ],

  },

  {

    id: 2,

    name: 'test2',

    cars: [{

        nr: [5, 4]

      },

      {

        nr: [2]


      },

      {

        nr: [8]


      },

      {

        nr: [5, 4]

      }

    ],

  }

]



const res = arr.map((item) => {

  return item.cars.reduce((acc, curr) => {

    acc = acc.concat(curr.nr)

    return acc;

  }, []).reduce((acc, curr) => {

    return acc + curr;

  }, 0);


});


console.log(res)



查看完整回答
反对 回复 2022-07-08
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

好吧,我不清楚你在找什么。但是,这里有一个示例代码,用于分别收集每个集合的 nr id。


let arr = [{

    id: 1,

    name: 'test',

    cars: [{

        nr: [5, 4]

      },

      {

        nr: [2]


      },

      {

        nr: [1]


      },

      {

        nr: [5, 4]

      }

    ],

  },

  {

    id: 2,

    name: 'test2',

    cars: [{

        nr: [5, 4]

      },

      {

        nr: [2]


      },

      {

        nr: [8]


      },

      {

        nr: [5, 4]

      }

    ],

  }

]



const res = arr

   .map(i => i.cars)

   .map(i => i

       .map(i => i.nr)

       .reduce((result,i)=>result.concat(i),[]));

console.log(res)


如果要删除重复项:


let arr = [{

    id: 1,

    name: 'test',

    cars: [{

        nr: [5, 4]

      },

      {

        nr: [2]


      },

      {

        nr: [1]


      },

      {

        nr: [5, 4]

      }

    ],

  },

  {

    id: 2,

    name: 'test2',

    cars: [{

        nr: [5, 4]

      },

      {

        nr: [2]


      },

      {

        nr: [8]


      },

      {

        nr: [5, 4]

      }

    ],

  }

]



const res = arr

   .map(i => i.cars)

   .map(i => i

       .map(i => i.nr)

       .reduce(function(result,i){

         i.map(item=>{

           if(result.indexOf(item)<0){

             result.push(item);

           }

         });

         return result;

       },[]));

console.log(res)


查看完整回答
反对 回复 2022-07-08
  • 3 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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