简短的答案:
let list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list = list.sort(() => Math.random() - 0.5)
长答案。
我需要对一个JavaScript数组中的元素进行洗牌。
换句话说,我想重新混合数组中的元素,使它们的顺序与前一个不同。
从一个这样的数组开始。
[1, 2, 3, 4, 5, 6, 7, 8, 9]
我希望每次运行这个操作时都有不同的结果,就像这样。
[4, 8, 2, 9, 1, 3, 6, 5, 7]
[5, 1, 2, 3, 7, 4, 9, 6, 8]
[3, 1, 4, 7, 8, 6, 2, 9, 5]
以下是我想出的过程。给定数组list 。
const list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
我们可以调用sort() 方法,该方法接受一个函数,返回-0.5和0.5之间的值。
list.sort(() => Math.random() - 0.5)
这个函数对数组中的每个元素都要运行。你可以传递数组中的2个元素,像这样:list.sort((a, b) => Math.random() - 0.5) ,但在这种情况下我们不使用它们。如果这个操作的结果是<0,元素a 被放到比b 更低的索引,如果结果是>0,则相反。
在一个列表上调用sort() ,不会改变原来的数组值。
现在你可以把这个操作的结果赋给一个新的变量,像这样。
const shuffled = list.sort(() => Math.random() - 0.5)
或者你也可以覆盖现有的列表,如果你把它声明为一个let 变量。
let list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
list = list.sort(() => Math.random() - 0.5)