javascript 数组问题

vara=[];varo=["32","13","21","32","12","54","22","31","25","88","50","50","01","00","... var a = [];
var o = ["32","13","21","32","12","54","22","31","25","88","50","50","01","00","03","20","12","02","11","00"];
for(var i=0;i<o.length;i++){
var v = o[i];
if(!a[v])a[v]=0;
a[v]++;
if(a[v]>1)alert("重复"+v);
}
解释一下for循环中的意思,我没看太懂。以及这样写和传统的遍历数组哪个性能更好?谢谢了
展开
 我来答
644792799
2011-09-01 · TA获得超过662个赞
知道小有建树答主
回答量:696
采纳率:100%
帮助的人:531万
展开全部
仅仅针对代码的话不解释,我说下原理和目的
1:a[]的length是由o[]中最大数决定的,在循环o没出现重复值之前都是在为a赋值,附的值并不是值的本身而是数出现的次数,出现重复值为该次数+1。
2:这个程序本身还存在一定的问题,以0打头的数是判断不到的,这样a[]中真正接收到的数其实只有15个(包括重复项)--------a[]中所有数相加为15
3:仔细观察(o[]中的值+1)== a[]中所在位置

目的:
就是找出o[]中大于等于10的重复项次数 重复项值为a[]中对应的索引值+1

给你把a[]贴出来可以观察到
[undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, 1, 2, 1, undefined, undefined, undefined, undefined, undefined, undefined, 1, 1, 1, undefined, undefined, 1, undefined, undefined, undefined, undefined, undefined, 1, 2, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, 2, undefined, undefined, undefined, 1, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, 1]

传统的阶层型遍历你这种点对点效率应该要高点
cs6641468
2011-09-01 · TA获得超过5713个赞
知道大有可为答主
回答量:863
采纳率:100%
帮助的人:994万
展开全部
你这代码运行后会弹出(alert) 显示:重复32 重复50 重复12 重复00
我给你讲下 怎么弹出重复32的吧。
第一次循环:
1.var v = o[0]; 所以 v =“32”
2.if(!a[v]) 里面 !a[32]为true (a[“32”]还没有赋值,默认是空或0,表示false, !a[“32”]就表示true),所以执行a[“32”]=0。
3.然后a[“32”]++变成1
4.if(a[“32”]>1) 中a[“32”]>1为false,所以循环结束,后面那句alert不执行

第二第三次循环同第一次循环:
分别使得
a[“13”] =1 ;a[“21”]=1 都不执行alert

第四次循环
1.var v = o[3]; 所以 v =“32”
2.if(!a[v]) 里面 !a[“32”]为false (a[“32”]根据第一次循环,已经为1,表示true。!a[“32”]就表示flase),所以不执行a[“32”]=0。
3.然后a[“32”]++变成2
4.if(a[“32”]>1) 中a[“32”]>1为true,所以执行alert("重复32”);
也就是看到的 :重复32

其他弹出操作都同理,你应该不难理解了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
skylence
2011-09-01
知道答主
回答量:25
采纳率:0%
帮助的人:15.2万
展开全部
for(var i=0;i<o.length;i++){
var v = o[i];//循环取值
if(!a[v])a[v]=0;//初始化每一个a循环的数组元素
a[v]++;//对下一次取到数组中的同一个元素进行叠加
if(a[v]>1)alert("重复"+v);//判断是否重复
}
这个代码的意思 是 取出重复的元素
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
笑壹個
2011-09-01 · TA获得超过403个赞
知道小有建树答主
回答量:311
采纳率:0%
帮助的人:229万
展开全部
统计数组o中字符串重复次数以o的元素字符串为索引存到数组a中
a["32"]=1;
a["13"]=1;
a["21"]=1;
a["32"]=2;
.......
.....
...
.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
baifeiyangdu
2011-09-01 · TA获得超过203个赞
知道答主
回答量:125
采纳率:0%
帮助的人:78.4万
展开全部
认真看看,就是找出数组中重复的元素
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式