ordersData = [
{ id: 100, name: 'order 1' },
{ id: 200, name: 'order 2' },
{ id: 300, name: 'order 3' },
{ id: 400, name: 'order 4' }
];
constructor( private objHelloService: HelloServiceService, private formBuilder: FormBuilder )
{
this.form = this.formBuilder.group({
orders: new FormArray([])
});
this.addCheckboxes();
}
private addCheckboxes()
{
this.ordersData.forEach((o, i) => {
const control = new FormControl(i === 0); // if first item set to true, else false
(this.form.controls.orders as FormArray).push(control);
});
}
submit()
{
const selectedOrderIds = this.form.value.orders.map((v:string, i:number) => v ? this.form.value.orders[i].id : null).filter(v => v !== null);
console.log(selectedOrderIds);
}
问题出在这里:
.filter(v => v !== null)
Typescript 说我没有指定 v
的类型。
这里的 v
是什么类型?
如何指定?
答案 0 :(得分:3)
试试下面,
const selectedOrderIds = this.form.value.orders
.filter(i => i !== null) //Filter array of orders by null check
.map(v => v.id) //Get only ids out of array of orders
ordersData = [
{ id: 100, name: 'order 1' },
null,
{ id: 200, name: 'order 2' },
null,
{ id: 300, name: 'order 3' },
null,
{ id: 400, name: 'order 4' }
];
const selectedOrderIds = ordersData
.filter(i => i !== null) //Filter array of orders by null check
.map(v => v.id) //Get only ids out of array of orders
console.log(selectedOrderIds) //[100, 200, 300, 400]
答案 1 :(得分:1)
取决于 orderData
架构,它会是这样的
{id: number, name: string}
但是在您将其映射到一个 ID
数组之后,您的架构 将是这样的
.filter((v: number) => v !== null)