我有一个东西,里面有健身房,里面有可用的设备:
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?
发布于 2020-08-28 03:14:45
使用.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);
https://stackoverflow.com/questions/63626927
复制相似问题