目前了解的解决办法constoldList=[1,2,3,4,5,6,7]//使用reduce函数接受一个初始值{0:[],1:[],length:2},//初始值包含两个空数组,和一个数组长度(Array.from方法要求将对象转数组时对象内要有这个属性)//在reduce函数内根据索引做余2判断,因为分两列,余0的加入第一个数组,余1的加入第二个数组//最后reduce返回遍历完的对象{0:[1,3,5,7],1:[2,4,6],length:2}//使用Array.from({0:[1,3,5,7],1:[2,4,6],length:2})得到数组[[1,3,5,7],[2,4,6]]//解构数组使用concat合并,完事constnewList=[].concat(...(Array.from(oldList.reduce((total,cur,index)=>{total[index%2].push(cur)returntotal},{0:[],1:[],length:2}))))console.log(newList)输出[1,3,5,7,2,4,6]然后再将两个数组合并,总之就是我想将[1,2,3,4,5,6]拆成[1.3.5]和[2,4,6]然后再合并成有什么最简洁,代码最少的方法将[1,2,3,4,5,6]改为[1,3,5,2,4,6],最好只遍历一次数组java代码:List里面的对象元素,以某个属性来分组,例如,以id分组,将id相同的放在一起:复制代码//List以ID分组Map<Integer,List>Map<Integer,List>groupBy=appleList.stream().collect(Collectors.groupingBy(Apple::getId));System.err.println("groupBy:"+groupBy);{1=[Apple{id=1,name='苹果1',money=3.25,num=10},Apple{id=1,name='苹果2',money=1.35,num=20}],2=[Apple{id=2,name='香蕉',money=2.89,num=30}],3=[Apple{id=3,name='荔枝',money=9.99,num=40}]}
2 回答
偶然的你
TA贡献1841条经验 获得超3个赞
这是题主按照答主思路写的一个思路一样,但实现不完全一样的符合题主要求的答案constoldList=[1,2,3,4,5,6,7]//使用reduce函数接受一个初始值{0:[],1:[],length:2},//初始值包含两个空数组,和一个数组长度(Array.from方法要求将对象转数组时对象内要有这个属性)//在reduce函数内根据索引做余2判断,因为分两列,余0的加入第一个数组,余1的加入第二个数组//最后reduce返回遍历完的对象{0:[1,3,5,7],1:[2,4,6],length:2}//使用Array.from({0:[1,3,5,7],1:[2,4,6],length:2})得到数组[[1,3,5,7],[2,4,6]]//解构数组使用concat合并,完事constnewList=[].concat(...(Array.from(oldList.reduce((total,cur,index)=>{total[index%2].push(cur)returntotal},{0:[],1:[],length:2}))))console.log(newList)输出[1,3,5,7,2,4,6]已下为答主提供的实现方式及思路,谢谢------------------------------------------------------constarr=[1,2,3,4,5,6]constnewArr=[...arr.filter(e=>e%2),...arr.filter(e=>e%2===0)]其实也没必要追求这点性能,既要代码少,又要效率高...我觉得乖乖写for循环最好了嗯...constobj=arr.reduce((a,b)=>{a[b%2].push(b)returna},{0:[],1:[]})constnewArr=obj[1].concat(obj[0])遍历一次呦不知道合不合楼主口味
添加回答
举报
0/150
提交
取消