在嵌套的FormArray中查找最小值



在我的角投影中,我的一个表单具有以下结构:

this.serviceForm = this.formBuilder.group({
[...],
options: this.formBuilder.array([
this.formBuilder.group({
[...],
availabilities: this.formBuilder.array([
this.formBuilder.group({
[...],
price: ['', Validators.required]
})
])
})
])
});

我想在我的表格中找到最低价格。我试过了,但我相信有更好的方法:

getMinPrice(serviceForm: FormGroup) {
let min = serviceForm.value.options[0].availabilities[0].price;
serviceForm.value.options.forEach(i => {
i.availabilities.forEach(j => {
if (j.price < min) {
min = j.price;
}
});
});
return min;
}

谢谢你的回答。

考虑到不关心最小价格的上下文,您可以简单地收集嵌套对象的价格值,然后使用Math.min执行最小搜索。

尝试以下操作:

interface FormValue {
options: Option[];
}
interface Option {
availabilities: Availability[];
}
interface Availability {
price: number;
}
function minPrice(f: FormValue) {
const prices: number[] = f.options.map(option => option.availabilities)
.reduce((acc, curr)=> acc.concat(curr), [] as Availability[])
.map(availability => availability.price)
.reduce((acc, curr) => acc.concat(curr), [] as number[]);
return Math.min(...prices);
}

旁注:接口是不完整的,我定义它们是为了在编辑器中进行类型推理。

您可以使用apply对数组运行标准的Math方法:

const values = [3, 5, 6, 2, 45, 6, 32];
const min = Math.min.apply(null, values);
const max = Math.max.apply(null, values);
console.log(min, max);

因此,您可以选择j.price值,并通过该机制运行它们。

最新更新