gpt4 book ai didi

javascript - 从数组中随机抓取 3 个项目,其中第 3 个项目可以是 “restaurant",但不一定是

转载 作者:行者123 更新时间:2023-11-28 16:47:59 24 4
gpt4 key购买 nike

对于标题写得不好,我深表歉意。我不知 Prop 体该怎么写。我有一个数组。我需要从数组中随机抓取三个项目。只有一个项目可以是“餐厅”,并且餐厅只能排在第三位。

让我用一个例子来解释一下。这是一个示例数组

el 1 - restaurant = false
el 2 - restaurant = true
el 3 - restaurant = true
el 4 - restaurant = false
el 5 - restaurant = false
el 6 - restaurant = false
el 7 - restaurant = true
el 8 - restaurant = false
el 9 - restaurant = false

我当前的代码循环遍历这个数组并随机抓取三个项目。位置 1 和 2 中永远不能有餐厅,因此必须从餐厅属性设置为 false 的项目中获取它们。第三个位置可以有一家餐厅,但我不希望它始终是一家餐厅。

这是我当前的代码:

const amountOfLocations = 3

// have list of locations
// shuffle it
for (let i = locations.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[locations[i], locations[j]] = [locations[j], locations[i]];
}

let selectedLocations = locations.slice(0, amountOfLocations)

我最初的想法是我只需要从当前循环中获取 2 个项目而不是 3 个,然后使用原始数组删除这两个项目并再次将数组打乱以随机获取另外一个项目,然后将其放入第三名。

最佳答案

您可以继续使用 shuffle 方法,这样您就不会像普通随机索引那样最终选择重复项,然后您只需从洗牌数组中提取第一个元素并将其称为“第三个”。然后过滤掉非餐厅(并切片之前的第一个索引,因为我们已经选择了它)并选择任意 2 个元素:

for (let i = locations.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[locations[i], locations[j]] = [locations[j], locations[i]];
}

let third = locations[0];
let [first, second] = locations.slice(1).filter(l => !l.restaurant);
let selectedLocations = [first, second, third];

关于javascript - 从数组中随机抓取 3 个项目,其中第 3 个项目可以是 “restaurant",但不一定是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60312242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com