推入数组会覆盖先前的值

时间:2018-09-19 14:30:08

标签: javascript arrays

我要构建具有以下格式的数组:

x = [
      {'projectName': 'a', 'serialNo': 1},
      {'projectName': 'b', 'serialNo': 2},
      {'projectName': 'c', 'serialNo': 3},
]

使用从表单传递的值

onSubmit(form: NgForm) {
    let x = []
    x.push({
      projectName: form.value.projectName,
      serialNo: form.value.serialNo,
    })

    console.log(x) // -> this will always give me the value I just inserted

    // form.value.project = JSON.stringify(x)
    // putObj(form.value).subscribe((res) => { });
}

然后,我在后端发送form.value并修改字段project。我的问题是,每次我将值推入x时,先前的值都会被覆盖。

似乎是哪个问题?如果我的代码不清楚,我可以解释或提供更多摘要。

编辑:非常感谢!我在组件内部声明了x

4 个答案:

答案 0 :(得分:3)

让x = [] //在外面声明

onSubmit(form:NgForm){

x.push({
  projectName: form.value.projectName,
  serialNo: form.value.serialNo,
})

console.log(x) // -> this will always give me the value I just inserted

// form.value.project = JSON.stringify(x)
// putObj(form.value).subscribe((res) => { });

}

答案 1 :(得分:1)

未经测试,但应在理论上起作用:

// ...
private x: {'projectName': string, 'serialNo':number}[] = [];
// ...
onSubmit(form: NgForm) {
    this.x.push({
      projectName: form.value.projectName,
      serialNo: form.value.serialNo,
    });

    console.log(this.x)
}
// ...

答案 2 :(得分:1)

是的,将let x = []移到函数之外。不确定您打算做什么,它可能需要是一个全局变量。每次输入函数时,都将x设置为空数组。

答案 3 :(得分:1)

删除

let x = []

您可以在组件的ur onInit方法中使用初始元素来定义数组,例如:

type x = Array<{projectName: string, serialNo: number}>;

ngOnInit() { 
    this.x = [
        {'projectName': 'a', 'serialNo': 1},
        {'projectName': 'b', 'serialNo': 2},
        {'projectName': 'c', 'serialNo': 3}, 
    ]
}

onSubmit(form: NgForm) {
    this.x.push({
        projectName: form.value.projectName,
        serialNo: form.value.serialNo,
    })
}