首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JavaScript中多次洗牌数组

如何在JavaScript中多次洗牌数组
EN

Stack Overflow用户
提问于 2018-09-11 16:30:22
回答 1查看 98关注 0票数 2

我一直在阅读在JavaScript中对数组执行洗牌的最佳方法,并且遇到了Fisher-Yates模型(在这篇文章这篇文章中)。我尝试使用文章中提到的两个示例函数,但是当我想要对数组进行多次洗牌并将不同的结果赋给两个不同的变量时,它们的结果完全相同。

代码语言:javascript
复制
    function shuffle(array) {
    var i = 0,
        j = 0,
        temp = null

    for (i = array.length - 1; i > 0; i -= 1) {
        j = Math.floor(Math.random() * (i + 1))
        temp = array[i]
        array[i] = array[j]
        array[j] = temp
    }
    return array;
}

var deck = ["bat", "black-cat", "blood", "bone", "brain", "broom", "candle", "candy", "castle", "cauldrom", "coffin", "costume", "death", "devil", "fish-bone", "full-moon", "ghost", "grave", "grave-yard", "half-moon", "horror", "lantern", "magic", "monster", "owl", "pumpkin", "skull", "spider", "spider-web", "tree", "tree-2", "witch", "witch-hat", "zombie-1", "zombie-2"];



var playerHand = shuffle(deck);
var computerHand = shuffle(deck);

console.log(playerHand);
console.log(computerHand);

在控制台中,playerHand返回:

代码语言:javascript
复制
["castle", "costume", "coffin", "candy", "blood", "death", "horror", "skull", "spider", "broom", "owl", "tree", "spider-web", "pumpkin", "grave", "devil", "brain", "ghost", "witch-hat", "magic", "bat", "black-cat", "full-moon", "tree-2", "cauldrom", "bone", "grave-yard", "half-moon", "zombie-1", "lantern", "monster", "zombie-2", "candle", "fish-bone", "witch"]

computerHand返回:

代码语言:javascript
复制
["castle", "costume", "coffin", "candy", "blood", "death", "horror", "skull", "spider", "broom", "owl", "tree", "spider-web", "pumpkin", "grave", "devil", "brain", "ghost", "witch-hat", "magic", "bat", "black-cat", "full-moon", "tree-2", "cauldrom", "bone", "grave-yard", "half-moon", "zombie-1", "lantern", "monster", "zombie-2", "candle", "fish-bone", "witch"]

这可能很简单,但我很困惑。我认为再次调用函数会返回不同的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-11 16:35:02

您的函数在“就地”数组中进行洗牌,也就是说,它正在更改数组,而不是创建新的数组。

因为它在第二个调用中是相同的数组,所以您正在“失去”第一个洗牌结果。

要解决这个问题,创建一个数组的克隆:

代码语言:javascript
复制
var playerHand = shuffle(deck.slice());
var computerHand = shuffle(deck.slice());
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52280421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档