gpt4 book ai didi

javascript - JS动态生成for循环

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:29:55 28 4
gpt4 key购买 nike

我正在使用第 3 方 API,该 API 允许我搜索特性。不幸的是,API 的编写方式不允许我搜索范围,因此我必须为范围内的每个值单独调用。

因此,如果我想搜索所有拥有 2 间或 3 间卧室的特性,我必须先调用 2 间卧室,然后再调用 3 间卧室。现在这可能会变得非常棘手,因为有多个字段可以包含一系列数字(卧室、浴室、地板、车库大小...)。

为此,我的强力 JavaScript 解决方案是创建一个嵌套的 for 循环,该循环将创建一个包含所有调用的数组。这不是一个可扩展的解决方案,我正在寻找一种方法来动态创建此 for 循环或另一种替代方法来获取我所有调用的数组。

我目前的解决方案:

const searchParams = {
minBedrooms: 2,
maxBedrooms: 4,
minBathrooms: 1,
maxBathrooms: 3,
minFloors: 1,
maxFloors: 1
};

let promises = [];

for (let bedrooms = searchParams.minBedrooms; bedrooms <= searchParams.maxBedrooms; bedrooms++) {
for (let bathrooms = searchParams.minBathrooms; bathrooms <= searchParams.maxBathrooms; bathrooms++) {
for (let floors = searchParams.minFloors; floors <= searchParams.maxFloors; floors++) {
promises.push(callApi(bedrooms, bathrooms, floors));
}
}
}

Promise.all(promises).then(response => {
// do stuff with response
}

此外,用户可能不会指定其中一个搜索参数(即卧室数量)。因此,API 不会应用该特定过滤器。我的代码目前会失败,因为没有传入卧室值,并且为每个 for 循环编写条件语句不是我的愿望。

关于如何动态生成上述嵌套 for 循环的任何想法?


编辑

如果用户没有指定卧室数量但指定浴室/楼层,我当前的解决方案将失败,因为初始 for 循环将不会运行。我不想求助于使用条件语句和大量嵌套循环来创建我的 promise 数组。这就是为什么我觉得我需要使用动态生成的 for 循环。

最佳答案

查看此问题的一种方法称为笛卡尔积 A × B × C - 对于 A 中的每个 a B 中的>bC 中的c,你想要一个元组(a, b, c).

例如 {1, 2} × {3, 4} 有 4 个结果元组:(1, 3), (1, 4), (2, 3), (2, 4).

最简单的方法是从第一组中的选项开始:(1)(2)。然后,对于第二组中的每个选项,用新值完成每个元组:

  • (1)(2) 添加了 3 得到 (1, 3)(2, 3)
  • (1), (2) 添加了 4 得到 (1, 4)(2, 4)

在代码中,这可能看起来像这样:

// Each key is associated with the set of values that it can take on
const properties = {
"bedrooms": [2, 3],
"bathrooms": [1, 2],
"floors": [1, 2, 3, 4],
}

// Start with a single "empty" tuple
let tuples = [{}]

for (let p in properties) {
// For each property, augment all of the old tuples
let nextTuples = []
for (let option of properties[p]) {
// with each possible option
nextTuples = nextTuples.concat(tuples.map(old => ({[p]: option, ...old})))
}
tuples = nextTuples;
}

元组结束

[
{
"floors": 1,
"bathrooms": 1,
"bedrooms": 2
},
{
"floors": 1,
"bathrooms": 1,
"bedrooms": 3
},
......
{
"floors": 4,
"bathrooms": 2,
"bedrooms": 3
}
]

关于javascript - JS动态生成for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49952059/

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