有个需求,要把一个数组a,变成另一种数组b的形式,具体看下面的结构:

    1. //数组a
    2. [{
    3.     a:'a1',
    4.     b:'1,2,3',
    5.     c:'c1',
    6. },{
    7.     a:'a2',
    8.     b:'3,4,5',
    9.     c:'c2',
    10. }]
    11. //数组b
    12. [{
    13.     a:'a1',
    14.     b:'1',
    15.     c:'c1',
    16. },{
    17.     a:'a1',
    18.     b:'2',
    19.     c:'c1',
    20. },{
    21.     a:'a1',
    22.     b:'3',
    23.     c:'c1',
    24. },{
    25.     a:'a2',
    26.     b:'3',
    27.     c:'c2',
    28. },{
    29.     a:'a2',
    30.     b:'4',
    31.     c:'c2',
    32. },{
    33.     a:'a2',
    34.     b:'5',
    35.     c:'c2',
    36. }]

    需求很简单,就是把数组a里面的b字段给打散,然后每个都变成一个新的数组。

    这里可以用es6的reduce来收集结果,不用再定义一个额外的变量来收集结果:

    1. var a=[{a:'a1',b:'1,2,3',c:'c1'},{a:'a2',b:'4,5,6',c:'c2'}];
    2. a.reduce((rs,item)=>{
    3.     return rs.concat(...item.b.split(',').map(b=>({...item,b})));
    4. },[]);

    这里注意一个技巧,假如有一个对象:let obj={name:'a'},然后有个变量:let name='b',那么{...obj,name}会变成{name:'b'},也就是会覆盖obj的name属性。

    回到顶部
    我要评论

    所有评论

      相关文章