for循环追加html js_javascript – JS动态生成For循环

我正在使用第三方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循环的任何想法?

编辑

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

解决方法:

一种看待这种情况的方法叫做笛卡尔乘积A×B×C – 对于A中的每个a和B中的b和C中的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

来源: https://codeday.me/bug/20190727/1549922.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值