data(){return{arr:[{data:[1,2,3,4],name:"文字"},{data:[1,2,4,5],name:"热巴"},{data:[1,8,3,2],name:"大大"}]}},我想转换为letnewarr=[{data:[1,1,1],//数组中所有的1放在一个数组共了3个name:"文字"},{data:[2,2,2],//数组中所有的2放在一个数组共了3个name:"热巴"},{data:[3,3],//数组中所有的3放在一个数组共了2个name:"大大"},{data:[4,4],//数组中所有的4放在一个数组共了2个name:"--"//没有name值为--},{data:[5],//数组中所有的5放在一个数组共了1个name:"--"},{data:[8],name:"--"},];dome的列子letarray1=[1,2,3,4,5];letarray2=[1,2,3,4,5];letarray3=[1,2,3,4,5];想要的是letarray=[{data:[1,1,1]},{data:[2,2,2]},{data:[3,3,3]},{data:[4,4,4]},{data:[5,5,5]}]这个怎么转成为这个格式呢?我的需求比较特殊
2 回答
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
constresult=arr//原数组//=>[[1,2,3,4],[1,2,4,5],[1,8,3,2]]//=>[1,2,3,4,1,2,4,5,1,8,3,2].flatMap(v=>v.data)//再=>[,[1,1,1],[2,2,2],[3,3],[4,4],[5], , ,[8]] .reduce((all,v)=>{consta=all[v]=all[v]||[];a.push(v);returnall;},[])//=>去掉 .filter(v=>v)//转成最终结果.map((v,i)=>({data:v,//在原数组中找name,如果没有,"--"name:(arr[i]||{}).name||"--"}));console.log(result);补充,flatMap如果不存在,这里有个简化的(未处理容错)Array.prototype.flatMap=function(convert){convert=convert||(x=>x);returnthis.map(convert).reduce((acc,t)=>[...acc,...t],[]);};
添加回答
举报
0/150
提交
取消