我有一个包含健身房的物件,上面有可用的设备:
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"]
}
]
我还列出了下一次锻炼所需的设备清单(然后将其转换为Set):
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()无法提供。
我将如何随机分配Gym输出,以便可以输出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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句