新手上路,取出现次数,怎么计算这个速度快呢?大佬们有什么好的建议?

letarr=['841','458','232','101','676',...]//500个成员的数组,内容都是随机三位数字
//想写这样的一个函数,指定数量,指定位置,指定字符,
//计算以上数组,在指定数量的成员里,指定字符在指定位置的出现次数
functioncalcNum(数量,位置,字符){
...
}
//前4个成员里,第二个位置是'3'的,有几个
calcNum(4,2,'3')->1
//前3个成员里,第三个位置是'1'的,有几个
calcNum(3,3,'1')->1
//前5个成员里,第三个位置是'1'的,有几个
calcNum(5,3,'1')->2
这样单个的计算,速度还行,但是这样就很慢了...
for(i=1;i<=500;i++){
calcNum(i,3,'1')
}
有大神能计算得快点吗?
POPMUISE
浏览 281回答 2
2回答

天涯尽头无女友

解决方案是先把数据处理成更易读取的对象,避免重复计算letarr=['841','458','232','101','676'];letdata=arr.reduce((d,str,index)=>{str.split('').forEach((v,i)=>{i+=1;if(!d[i])d[i]={};if(!d[i][v])d[i][v]=[];d[i][v].push(index);});returnd;},{});functioncalcNum(start,i,v){constary=data[i]&&data[i][v]?data[i][v]:[];if(ary.length){constindex=ary.findIndex(_i=>_i>=start);returnary.length-(index>-1?index:0);}return0;}

蛊毒传说

你能先说清楚你到底在求什么吗?你这个for里面的计算结果是累加还是干嘛?如果是:letcount=0for(i=1;ip=p*2+(c.split("")[pos-1]===target?1:0),0)如果是:for(i=1;i
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript