如何随机化(shuffle)一个Javascript集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何随机化(shuffle)一个Javascript集相关的知识,希望对你有一定的参考价值。

我想合并3组然后迭代它们的联合,但我希望这个联合是随机的。

如果我做:

const a = new Set([1,2,3]);
const b = new Set([10,20,30]);
const c = new Set([100,200,300]);
const d = new Set([...a, ...b, ...c]);
const iterator = d.values();
for (let i = 0; i < 9; i++) {
    console.log(iterator.next());
}

我显然把它们整理好了,而不是让它们洗牌。是否存在另一种(更惯用和/或有效)的方式,而不是使用像this question这样的改组数组函数:

let setArray = Array.from(d);
shuffleArray(setArray);
const randomSet = new Set(setArray);
答案

在创建集合之前随机化数组,这样就可以获得集合删除重复项的好处,但是可以对其数据进行混洗。这假定了很多东西(你想经常重新洗牌吗?,你以后会在这个集合中添加更多的东西吗?......)

const arr1 = [1, 2, 3];
const arr2 = [10, 20, 30];
const arr3 = [100, 200, 300];
const arrs = shuffle([ ...arr1, ...arr2, ...arr3 ]);

const d = new Set(arrs);
const iterator = d.values();
for (let i = 0; i < 9; i++) {
    console.log(iterator.next());
}
另一答案

如果你问是否有更好的功能,那么也许How can I shuffle an array?(ES2015(ES6))这将有所帮助。

如果我不明白你的问题那么抱歉。

以上是关于如何随机化(shuffle)一个Javascript集的主要内容,如果未能解决你的问题,请参考以下文章

在砌体中随机化砖块

在Python中随机化一个列表[重复]

这个Prolog代码如何真正起作用 - 随机播放两个列表

在 Java 中随机化整数数组的最快方法

如何使用 std::shuffle 以随机序列对具有唯一指针的向量进行混洗?

随机播放 16 位向量 SSE