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; //还有这个
}
}
:)
1
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 ,相当于给个替换空值的默认值)。 这是个啥程序?掏兜摸小球、每个摸两次? |
2
6god OP @SilentDepth 谢谢你啦 :) 这个程序的作用是把 a b c 分别两次写道新的数组里, 并且是无序排列
|
3
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 ,继续随机 |
4
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; |