怎么优化这段代码

clipboard.png
如图,对v这个数组进行了map遍历然后得到新的2个数组:


我想的是 这2个map都是对同一个数组进行迭代,有没有办法在一次map就直接得到想要的2个数组!!!!

阅读 1.5k
3 个回答
//版本1
let KnowledgeTreeName = [],
    data = [];
v.forEach(_v => {
    KnowledgeTreeName.push(`第${intToChinese(_v.num)}课时`);
    data.push(_v.Pre);
});
this.state.KnowledgeTreeName = KnowledgeTreeName;
this.state.data = data;
//版本2
let this.state.KnowledgeTreeName = [],
    this.state.data = [];
v.forEach.bind(this, function(_v) {
    this.state.KnowledgeTreeName.push(`第${intToChinese(_v.num)}课时`);
    this.state.data.push(_v.Pre);
});
let arr1 = [], arr2 = []
v.map(o => arr1.push(o.num) && arr2.push(o.Pre))

那我只能想出这种办法了。


map 操作就是对一个集合里的每个元素进行映射操作,并把这些映射出来的新元素组合成一个数组,怎么返回两个数组出来。

另外,在函数体里只有 return 时,可以省略 return

v.map(_v => `第${intToChinese(_v.num)}课时`);

不知道楼主现在用没用到 reduce 方法。

let {KnowledgeTreeName, data} = v.reduce((acc,_v)=>{
    acc.KnowledgeTreeName.push(`第${intToChinese(_v.num)}课时`)
    acc.data.push(_v.Pre)
    return acc
},{KnowledgeTreeName:[],data:[]})

this.state.KnowledgeTreeName = KnowledgeTreeName;
this.state.data = data;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题