Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript shuffle函数在for循环中返回相同的值_Javascript - Fatal编程技术网

Javascript shuffle函数在for循环中返回相同的值

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)

为什么在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));
    }
    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()函数丢失引用是一种常见做法吗?