JS中数组元素的随机子集

Random subset of array elements in JS

我正在尝试 select 数组中三个唯一元素的随机集合。我是 JS 的新手,而且我经常被意外的引用行为绊倒(Python 是我最好的语言)。我认为这里也正在发生这种情况。这是P5.JS.

这是我的尝试:

var points = [[0,0],[.5*w,0],[w,0],
[0,.5*h],[.5*w,.5*h],[w,.5*h],
[0,h],[.5*w,h],[w,h]];

var vert = [];
var start = int(random(0,8));
vert.push(points[start].slice());
points.splice(start,1);

var middle = int(random(0,7));
vert.push(points[middle].slice());
points.splice(middle,1);

var end = int(random(0,6));
vert.push(points[end].slice());

当我查看 vert 的内容时,很明显我没有得到预期的元素。特别是,我从来没有得到原始数组中最后三个元素中的任何一个。

如上所述,int()random() 是 p5.js 函数,很好。通过删除 push() 语句中的 .slice() 实例解决了该问题:

var vert = [];

var start = int(random(0,8));
vert.push(points[start]);
points.splice(start,1);

var middle = int(random(0,7));
vert.push(points[middle]);
points.splice(middle,1);

var end = int(random(0,6));
vert.push(points[end]);