我有一些数组,想要使用shuffle(as explained here)
随机化它们但是,我希望我的所有数组都连接成一个大数组,然后逐个遍历数组。
现在我注意到了这个:
var proxies = [
{stim: A},
{stim: B},
{stim: C},
{stim: D}]
var a = shuffle(proxies); var b = shuffle(proxies); var c = shuffle(proxies);
var x = a.concat(b, c)
也不是:
var x = shuffle(proxies).concat(shuffle(proxies), shuffle(proxies))
会生成一个更大的数组,该数组由我的初始代理数组的三个不同的混洗顺序组成。
如果我登录到控制台,我看到对于这两个选项,它总是一次洗牌顺序重复三次。好像它只被洗牌了一次然后依旧保持这种状态。
关于解决这个问题的想法?
答案 0 :(得分:1)
如果您想使用问题中提到的帖子的功能,您必须稍微修改它。你的代码将是
<script type="text/javascript">
function shuffle(array) {
var newarr=[]
var currentIndex = array.length,
temporaryValue,
randomIndex;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
newarr[currentIndex] = array[randomIndex]
array[randomIndex] = temporaryValue;
}
return newarr;
}
var proxies = [{stim:'a'},{stim: 'b'},{stim: 'c'},{stim: 'd'}]
var a=shuffle(proxies);
var b=shuffle(proxies);
var c=shuffle(proxies);
var x=a.concat(b, c)
console.log(x)
</script>
答案 1 :(得分:0)
好像你的shuffle()
函数在给定的数组上运行,而不是生成一个新的函数。所以在你的第一个例子中,a,b和c都等于同一个数组。
如果要创建3个唯一的shuffle,则必须在重排和连接之前克隆/复制数组。有很多选择,例如:How do you clone an Array of Objects in Javascript?