var items = Array(523,3452,334,31,...5346);
Run Code Online (Sandbox Code Playgroud)
我如何从中获取随机物品items?
可能重复:
如何随机化一个javascript数组?
我想在JavaScript中随机播放一系列元素,如下所示:
[0, 3, 3] -> [3, 0, 3]
[9, 3, 6, 0, 6] -> [0, 3, 6, 9, 6]
[3, 3, 6, 0, 6] -> [0, 3, 6, 3, 6]
Run Code Online (Sandbox Code Playgroud) 我想生成0到1000之间永远不会重复的唯一随机数(即6不会出现两次),但这并不是像以前的值的O(N)搜索那样.这可能吗?
我遇到了一个挑战,我需要一个在给定范围内返回随机数的函数0 - X.不仅如此,我还要求返回的数字是唯一的 ; 不复制先前调用该函数时已返回的数字.
可选地,当完成此操作时(例如,范围已经"耗尽"),只需返回范围内的随机数.
怎么会这样做呢?
这是代码。从这个答案得到了想法。
我使用泛型类型参数:T extends unknown[],因为此函数应该适用于任何类型的数组。
export const pickRandomItems = <T extends unknown[]> (arr: T, n: number): T => {
const shuffled = Array.from(arr).sort(() => 0.5 - Math.random());
return shuffled.slice(0, n);
};
Run Code Online (Sandbox Code Playgroud)
但我在声明中收到以下错误return:
如果我进行类型断言,它就会消失。但为什么有必要呢?难道我做错了什么?
笔记:
下面的行被评估为unknown[],那么为什么类型断言仍然是必要的呢?
const result = shuffled.slice(0, n);
Run Code Online (Sandbox Code Playgroud) var array = ["one", "two", "three", "four", "five"];
var item = array[Math.floor(Math.random()*array.length)];
Run Code Online (Sandbox Code Playgroud)
上面的代码从数组中随机选择一个项目。但是,我怎么能让它一次从数组中选择 3 个随机元素,而不仅仅是一个。
而不是仅选择three例如,它应该类似于two five one.