Javascript shuffle函数在for循环中返回相同的值
为什么在for循环中使用shuffle函数对三个数组进行洗牌时,会得到相同顺序的三个数组Javascript shuffle函数在for循环中返回相同的值,javascript,Javascript,为什么在for循环中使用shuffle函数对三个数组进行洗牌时,会得到相同顺序的三个数组 var items = ['x', 'y', 'z', 'a', 'b']; var createSlots = function(slots) { slots = slots || 3; var slotRack = []; for (var i = 0; i < slots; i++ ) { slotRack.push(shuffle(items)
var items = ['x', 'y', 'z', 'a', 'b'];
var createSlots = function(slots)
{
slots = slots || 3;
var slotRack = [];
for (var i = 0; i < slots; i++ )
{
slotRack.push(shuffle(items));
}
return slotRack;
}
function shuffle(o){ //v1.0
for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
var slotmachine = createSlots();
// returns three arrays with values in the same order... do not want that... :(
console.log(slotmachine);
var items=['x','y','z','a','b'];
var createSlots=函数(插槽)
{
插槽=插槽| | 3;
var slotRack=[];
对于(变量i=0;i
斜视
在上面的评论中说明了您的问题。不管怎样,这里有一个更酷的洗牌方法,它总能让你摆脱麻烦:
function shuffle(arr) {
return arr.sort(function () {
return Math.random() - Math.random()
});
};
编辑(感谢Llama先生的):
改为使用(感谢Christoph
实现):
斜视
在上面的评论中陈述了您的问题。
不管怎样,这里有一个更酷的洗牌方法,它总能让你摆脱麻烦:
function shuffle(arr) {
return arr.sort(function () {
return Math.random() - Math.random()
});
};
编辑(感谢Llama先生的):
改为使用(感谢Christoph
实现):
斜视
在上面的评论中陈述了您的问题。
不管怎样,这里有一个更酷的洗牌方法,它总能让你摆脱麻烦:
function shuffle(arr) {
return arr.sort(function () {
return Math.random() - Math.random()
});
};
编辑(感谢Llama先生的):
改为使用(感谢Christoph
实现):
斜视
在上面的评论中陈述了您的问题。
不管怎样,这里有一个更酷的洗牌方法,它总能让你摆脱麻烦:
function shuffle(arr) {
return arr.sort(function () {
return Math.random() - Math.random()
});
};
编辑(感谢Llama先生的):
改为使用(感谢Christoph
实现):
如果在循环的每次迭代中都要推入对同一数组的引用,请尝试以下方法:
slotRack.push(shuffle(items.slice()));
在这里查看:
编辑:也许最好在函数中执行slice()
,因此返回o.slice()
,使用函数时不必担心这个问题。如果在循环的每次迭代中都将引用推入同一数组,请尝试以下操作:
slotRack.push(shuffle(items.slice()));
在这里查看:
编辑:也许最好在函数中执行slice()
,因此返回o.slice()
,使用函数时不必担心这个问题。如果在循环的每次迭代中都将引用推入同一数组,请尝试以下操作:
slotRack.push(shuffle(items.slice()));
在这里查看:
编辑:也许最好在函数中执行slice()
,因此返回o.slice()
,使用函数时不必担心这个问题。如果在循环的每次迭代中都将引用推入同一数组,请尝试以下操作:
slotRack.push(shuffle(items.slice()));
在这里查看:
编辑:也许最好在函数中执行slice()
,因此返回o.slice()
,使用函数时不必担心这个问题。您总是在变异相同的数组对象。如果希望每个结果都包含一组唯一的值,则需要创建一个副本。slotRack.push(shuffle(items.slice())
另请参见:您总是在变异相同的数组对象。如果希望每个结果都包含一组唯一的值,则需要制作副本。slotRack.push(shuffle(items.slice())
另请参见:您总是在变异相同的数组对象。如果希望每个结果都包含一组唯一的值,则需要制作副本。slotRack.push(shuffle(items.slice())
另请参见:您总是在对同一数组对象进行变异。如果希望每个结果都包含一组唯一的值,则需要创建一个副本。slotRack.push(shuffle(items.slice())
另请参见:nonono,永远不要将sort
与Math.random()一起使用。)
洗牌数组。结果。改用。.@Mr.Llama-不知道-谢谢你的推荐。我还更新了我的帖子,以防止将来的误解。诺诺诺诺诺诺诺诺诺,永远不要使用排序
和Math.random()
洗牌数组。结果。改用。.@Mr.Llama-不知道-谢谢你的推荐。我还更新了我的帖子,以防止将来的误解。诺诺诺诺诺诺诺诺诺,永远不要使用排序
和Math.random()
洗牌数组。结果。改用。.@Mr.Llama-不知道-谢谢你的推荐。我还更新了我的帖子,以防止将来的误解。诺诺诺诺诺诺诺诺诺,永远不要使用排序
和Math.random()
来洗牌数组。结果是。改用。.@Mr.Llama-不知道-谢谢你的推荐。我还更新了我的帖子以防止将来的误解。谢谢大家,使用slice()函数丢失引用是一种常见做法吗?谢谢大家,使用slice()吗函数丢失引用是一种常见做法吗?谢谢大家,使用slice()函数丢失引用是一种常见做法吗?谢谢大家,使用slice()函数丢失引用是一种常见做法吗?