javascript - 有没有办法从包含特定值的对象中找到()随机元素
问题描述
我有一个包含健身房及其可用设备的对象:
const gyms = [
{
"name": "gym1",
"equipmentAvailable": ["nothing"]
},
{
"name": "gym2",
"equipmentAvailable": ["jump rope","stationary bike","barbell"]
},
{
"name": "gym3",
"equipmentAvailable": ["kettlebell","dumbbell"]
},
{
"name": "gym4",
"equipmentAvailable": ["barbell","kettlebell","jump rope"]
}
]
我还列出了下一次锻炼所需的设备清单(然后转换为套装):
const availableNeeded = ["barbell","jump rope"]
const equipmentSet = new Set(availableNeeded);
目前我正在使用 .find() 拉出第一个符合我的设备需求的健身房:
const filteredWorkouts = gyms.find(workout => (
workout.equipmentAvailable.some(equipment => equipmentSet.has(equipment))
))
console.log(filteredWorkouts)
自然,这总是返回gym2,因为它是第一个匹配所需设备的健身房。但是,有时我想将其切换到gym4,因为它也有所需的设备,但 find() 不会提供。
我如何随机化健身房输出,以便它可以吐出gym2或gym4?
解决方案
使用.filter
而不是.find
获取可能匹配的数组,然后从数组中获取随机元素:
const gyms = [
{
"name": "gym1",
"equipmentAvailable": ["nothing"]
},
{
"name": "gym2",
"equipmentAvailable": ["jump rope","stationary bike","barbell"]
},
{
"name": "gym3",
"equipmentAvailable": ["kettlebell","dumbbell"]
},
{
"name": "gym4",
"equipmentAvailable": ["barbell","kettlebell","jump rope"]
}
];
const availableNeeded = ["barbell","jump rope"];
const filteredWorkouts = gyms.filter(gym => (
availableNeeded.every(equip => gym.equipmentAvailable.includes(equip))
));
const result = filteredWorkouts[Math.floor(Math.random() * filteredWorkouts.length)];
console.log(result);
推荐阅读
- java - 我想在 Java 中循环,直到用户输入正确的值,但我做不到
- javascript - 使用 SSR 时未定义 Nuxt Store 的初始状态
- javascript - 创建帐户后 displayName 总是返回 null
- html - 如何影响所选卡的部分
- firebase - 如何将 react-native-leaderboard 与 firestore 中的值一起使用
- r - 更改ggplot中某些类别的线型?
- opencv - CMake 错误:CUDA_cublas_LIBRARY(高级)
- javascript - 可编辑的 div 仅显示 foreach 循环中的第一个 div 元素
- linux - /usr/bin/nice -n -19: 没有这样的文件或目录但是 nice 存在
- r - filter() 中的 str_split()