Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从地图Ecma6对象中拾取随机项?_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 如何从地图Ecma6对象中拾取随机项?

Javascript 如何从地图Ecma6对象中拾取随机项?,javascript,ecmascript-6,Javascript,Ecmascript 6,如何从映射中检索随机项?您可以首先获取数组中映射的值,然后将数组的长度作为随机因子,并在随机索引处获取值 map = new Map([ [ 1, 'one' ], [ 2, 'two' ], [ 3, 'three' ], ]); var-map=新映射([[1'一'],[2'二'],[3'三']), values=[…map.values()], random=值[Math.floor(Math.random()*values.length)]; 控制台日志(随

如何从映射中检索随机项?

您可以首先获取数组中映射的值,然后将数组的长度作为随机因子,并在随机索引处获取值

map = new Map([
    [ 1, 'one' ],
    [ 2, 'two' ],
    [ 3, 'three' ], 
]);
var-map=新映射([[1'一'],[2'二'],[3'三']),
values=[…map.values()],
random=值[Math.floor(Math.random()*values.length)];

控制台日志(随机)
假设映射中的键是连续的,您将获得一个介于
1
Map.length
之间的随机数,然后从映射中检索对应于该随机数的值

map=新映射([
[1,‘一’],
[2,‘两’],
[3,‘三’],
]);
const rand=Math.floor(Math.random()*map.size)+1;
const randomFromMap=map.get(rand);

console.log(randomFromMap)从地图创建一个数组,然后选择一个随机键。您可以使用
Math.round(Math.random()*(array.length-1))
为数组创建一个“骰子”值

map=新映射([
[1,‘一’],
[2,‘两’],
[3,‘三’],
]);
让array=array.from(map);
让dice=Math.round(Math.random()*(array.length-1))
让值=数组[骰子];
//值包含具有键/值对的数组。

console.log(值)生成一个介于1和3之间的随机数,然后获取此数字可能不是随机元素的正确数据结构。您知道如何使用
数学。随机
数学。地板(x)+1
数学不同。ceil(x)
。您的代码有(小但存在)失败的机会
entries()
不返回数组,您需要
array.from(…)
将迭代器转换为“random”,即表示“概率相等”。
function nth(x, iterable) {
    for (const el of iterable)
        if (x-- == 0)
            return el;
    throw new Error("not found");
}

console.log(nth(Math.floor(Math.random() * map.size), map.values())) // or keys or entries