javascript - 从数组中获取两个随机的非连续且唯一的元素
问题描述
嗨,我正在尝试从不连续的列表中获取两个唯一的随机元素。数组形成如下
[
{"id": 1, "name": "Monday", "workers": []},
{"id": 2, "name": "Tuesday", "workers": []},
{"id": 3, "name": "Wednesday", "workers": []},
{"id": 4, "name": "Thursday", "workers": []},
{"id": 5, "name": "Friday", "workers": []},
]
我设法获得了以下两个独特的元素:
getTwoNonConsecutiveDays = () => {
var days = require('./weeks.json');
let selected = [];
let randomday = () => {
const shuffled = days.sort(() => 0.5 - Math.random());
// Get sub-array of first n elements after shuffled
selected = shuffled.slice(0, 2);
但是,当我试图使条件不连续时不起作用
if (selected[0].id === selected[1].id) {
console.log('greseala')}
selected[0].id
解决方案
你可以这样去:
- 选择 3 个后续项目的随机居中窗口(如果从第一个数组项目开始,则为 2 个)并将中间的一个作为第一个项目
- 删除选定的三元组(例如使用
Array.prototype.splice()
)以避免选择第一个随机项目或其邻居 - 从剩下的那些中随机选择第二个随机项目
const src = [{"id":1,"name":"Monday","workers":[]},{"id":2,"name":"Tuesday","workers":[]},{"id":3,"name":"Wednesday","workers":[]},{"id":4,"name":"Thursday","workers":[]},{"id":5,"name":"Friday","workers":[]}],
getRandomPair = ([...a]) => {
const {random} = Math,
windowPos = 0|random()*(a.length-1),
e1 = a.splice(windowPos, windowPos ? 3 : 2)[windowPos && 1],
e2 = a[0|random()*a.length]
return [e1,e2]
}
console.log(getRandomPair(src))
.as-console-wrapper{min-height:100%;}
推荐阅读
- angular-cli - @Angular/CLI 坏了
- javascript - mongodb findUpdateOne 用对象替换对象
- c++ - 为什么我的地图只是在 lambda 函数中临时修改并且值没有保留?
- angular - ng build 失败,找不到模块错误
- swift - GMSPlace 方法 isOpen 返回值 GMSPlaceOpenStatus 值始终为“未知”
- python - 有没有办法将 python 列表导出到 csv 文件?
- redis - Redis Mass Insertion 不适用于(错误)ERR 未知命令
- mysql - 如何删除另一个表中不存在的 JSON 键?
- swagger - OpenAPI 中的可变查询参数名称
- python - ValueError 无法广播从形状 (1) 到形状 () 的掩码