如何混合JavaScript数组中的元素

66 阅读1分钟

简短的答案:

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,则相反。

你可以在这里阅读关于Array.sort()的所有细节

在一个列表上调用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)