调用formBuilder.group({})中的函数

时间:2019-06-17 05:56:44

标签: angular angular-reactive-forms

我创建了一个反应形式,当我创建formBuilder.group时,我想为数组中的对象设置下一个ID

 JSON
 this.getData = [{
"id": 0,
"first_name": "Aaaa",
"last_name": "Aaa aaaa"
}, {
"id": 1,
"first_name": "Bbbb",
"last_name": "Bbb Bbbbbb"
 }, {
"id": 2,
"first_name": "Cccc",
"last_name": "Cccccc"

}]


ngOnInit() {
this.form = this.formBuilder.group({
  id: Math.max.apply(
    Math,
    this.getData.map(function(o) {
      return o.id + 1;
    })
  ),
  first_name: "",
  last_name: ""
});
}

但是为此Math.max.apply我得到了null

这里有什么方法可以调用该函数吗?

我也尝试像这样在formBuilder之外制作函数

getNextId(){
Math.max.apply(
    Math,
    this.getData.map(function(o) {
      return o.id + 1;
    })
  )}

,然后像这样在formBuilder.group中调用函数 id: this.getNextId()

但还是一样...

如果我在表格外调用此函数,则会得到正确的数字 thnx

1 个答案:

答案 0 :(得分:1)

正如MDN上的documentation一样,您有几种从数字数组中获取最大值的方法(这里我已经完成+1来获取下一个ID)。

使用reduce()

getNextId() {
    return this.getData.map(d => d.id).reduce((a, b) => Math.max(a, b)) + 1;
}

使用apply()

getNextId() {
    return Math.max.apply(null, this.getData.map(d => d.id)) + 1;
}

使用点差运算符:

getNextId() {
    return Math.max(...this.getData.map(d => d.id)) + 1;
}