首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有方法从包含特定值的对象中查找()随机元素

是否有方法从包含特定值的对象中查找()随机元素
EN

Stack Overflow用户
提问于 2020-08-28 03:12:50
回答 1查看 51关注 0票数 0

我有一个东西,里面有健身房,里面有可用的设备:

代码语言: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"]
  }
]

我还得到了我下一次锻炼所需的设备清单(然后转换成一套):

代码语言:javascript
复制
const availableNeeded = ["barbell","jump rope"]

const equipmentSet = new Set(availableNeeded);

目前,我正在使用.find()来拉动第一个与我的设备需要匹配的健身房:

代码语言:javascript
复制
const filteredWorkouts = gyms.find(workout => (
  workout.equipmentAvailable.some(equipment => equipmentSet.has(equipment))
))

console.log(filteredWorkouts)

当然,这总是返回gym2,因为它是第一个与所需设备匹配的健身房。但是,有时我希望将其切换到gym4,因为它也有所需的设备,但find()无法交付。

我如何将健身房的输出随机化,以便它可以吐出gym2或gym4?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-28 03:14:45

使用.filter而不是.find获取一个可能匹配的数组,然后从数组中获取一个随机元素:

代码语言: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 filteredWorkouts = gyms.filter(gym => (
  availableNeeded.every(equip => gym.equipmentAvailable.includes(equip))
));
const result = filteredWorkouts[Math.floor(Math.random() * filteredWorkouts.length)];
console.log(result);

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63626927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档