求助 请帮忙解释 2 行 javascript 代码

2015-09-22 11:44:20 +08:00
 6god

var array1 = ['A', 'B', 'C'],
array2 = [],
done = {}, random; // {} 在这里是什么东西呢?

while (array1.length * 2 != array2.length) {
random = Math.floor(Math.random() * array1.length);
if (done[random] != 2) { //这一步完全不理解
array2.push(array1[random]);
done[random] = (done[random] || 0) + 1; //还有这个
}
}

:)

2071 次点击
所在节点    JavaScript
4 条回复
SilentDepth
2015-09-22 13:05:50 +08:00
{}就是一个空对象,和第 2 行一个路数(快速创建新数组 /对象)
random 被赋值为 0 到 array1 长度之间的一个随机值,所以 done[random]就是取 done 这个对象的某个随机的属性(把 done 看成一个数组也没啥问题),又所以 done[random] != 2 保证 done 的成员最终都会变成 2 。
done[random] || 0 (应该是看不懂这个吧)的意思是「取 done[random],如果取到的是 undefined 、 null 之类的逻辑否值,则返回 0 ,相当于给个替换空值的默认值)。

这是个啥程序?掏兜摸小球、每个摸两次?
6god
2015-09-22 13:24:58 +08:00
@SilentDepth 谢谢你啦 :) 这个程序的作用是把 a b c 分别两次写道新的数组里, 并且是无序排列
xuyinan503
2015-09-22 16:30:11 +08:00
done 是一个计数器
array2.push(array1[random]);//array1 的数据插入之后
done[random] = (done[random] || 0) + 1; //done 加 1

if (done[random] != 2) { //当 done 计数为 2 的时候,不做 push ,继续随机
joyee
2015-09-22 17:57:53 +08:00
1. 你把 done 看成一个 hash , key 是生成的随机数, value 是自己维护的计数
2. done[random] = (done[random] || 0) + 1; 看成这样就行了

var tmp;
if (done[random])
tmp = done[random];
else
tmp = 0;

done[random] = tmp + 1;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/222721

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX