Javascript:通过在while循环内推送/拼接来随机化数组

Javascript: randomizing array by pushing/splicing inside while loop

本文关键字:拼接 数组 随机化 循环 while Javascript      更新时间:2023-09-26

我正在尝试随机化包含HTML元素的Javascript数组。这是我到目前为止所拥有的,但不幸的是,之后我仍然会得到几个重复项。我不明白这段代码有什么问题。有什么想法吗?

function randomizeArray(theArray)
        {
            var result = new Array();
            var randomNr;
            while ( theArray.length>0 )
            {
                randomNr = Math.floor( (Math.random() * theArray.length) );
                result.push( theArray[randomNr] );
                theArray.splice( randomNr, 1);
            }
            return result;
        }

编辑:经过进一步审查,当我用数字数组测试它时,这段代码似乎按预期工作。出于某种原因,我的元素数组仍然重复。

  • 我没有将元素本身放在数组中,而是使用了元素的 .html()。在那次小修改之后,一切都突然按预期工作。我仍然不知道为什么会这样,但至少它确实有效:)
  • 查看这篇文章的最高答案:循环中的随机数

    不同的语言,但理论是相同的。Math.random()使用的种子编号每次都相同,并导致模式出现,这反过来又会产生您获得的副本。

    代码按预期工作,问题是我的数组包含元素对象。一旦我将这些对象转换为相应的 html,并将它们用作数组中的项目,一切都很好。