Angular 5 - 从 FormGroup 创建对象数组将相同的对象推入我的数组
Angular 5 - Creating array of objects from FormGroup pushes the same object into my array
我认为我在 javascript/typescript 通过引用传递时遇到了问题。
我有一组对象需要从 FormGroup 创建。
除了 ObjectDate 之外,每个对象的所有 FormGroup 属性都应该保持不变。所以我遍历我的数组,但我最终将同一个对象推入我的数组。
for (let i = 0; i < this.objects.length; i++) {
const object = this.fg.value as Object;
object.ObjectDate = new Date(this.date.getDate() + i);
this.objects.push(object);
}
生成的数组包含具有相同 ObjectDate 的对象。例如,如果今天是 8 月 30 日,则数组中所有对象的 ObjectDate 都是 9 月 6 日。
您的主要问题是:
const object = this.fg.value as Object;
每次迭代您都在修改同一个对象。要创建 this.fg.value
的副本,您可以使用 Object.assign:
Object.assign({}, this.fg.value)
Object.assign
将作为第二个参数传递的对象的所有属性复制到作为第一个参数传递的对象中。
另一个大问题是这条线:
object.ObjectDate = new Date(this.date.getDate() + i);
当您将一个数字传递给构造函数时 new Date(value),该值被视为自 1970 年 1 月 1 日以来的毫秒数,00:00:00 UTC。所以每次迭代只增加 1 毫秒 而不是天。
您可以改用 setDate
来解决此问题,例如:
// Create a copy of the re-used date
object.ObjectDate = new Date(this.date.getTime());
// Increment the date for each iteration
object.ObjectDate.setDate(this.date.getDate() + i);
另一条令人不安的线
this.objects.push(object);
您正在将对象添加到您正在迭代的数组中。也许你打算做
this.objects[i] = object;
欢迎来到 Stack Overflow,祝您学习愉快!
我认为我在 javascript/typescript 通过引用传递时遇到了问题。
我有一组对象需要从 FormGroup 创建。 除了 ObjectDate 之外,每个对象的所有 FormGroup 属性都应该保持不变。所以我遍历我的数组,但我最终将同一个对象推入我的数组。
for (let i = 0; i < this.objects.length; i++) {
const object = this.fg.value as Object;
object.ObjectDate = new Date(this.date.getDate() + i);
this.objects.push(object);
}
生成的数组包含具有相同 ObjectDate 的对象。例如,如果今天是 8 月 30 日,则数组中所有对象的 ObjectDate 都是 9 月 6 日。
您的主要问题是:
const object = this.fg.value as Object;
每次迭代您都在修改同一个对象。要创建 this.fg.value
的副本,您可以使用 Object.assign:
Object.assign({}, this.fg.value)
Object.assign
将作为第二个参数传递的对象的所有属性复制到作为第一个参数传递的对象中。
另一个大问题是这条线:
object.ObjectDate = new Date(this.date.getDate() + i);
当您将一个数字传递给构造函数时 new Date(value),该值被视为自 1970 年 1 月 1 日以来的毫秒数,00:00:00 UTC。所以每次迭代只增加 1 毫秒 而不是天。
您可以改用 setDate
来解决此问题,例如:
// Create a copy of the re-used date
object.ObjectDate = new Date(this.date.getTime());
// Increment the date for each iteration
object.ObjectDate.setDate(this.date.getDate() + i);
另一条令人不安的线
this.objects.push(object);
您正在将对象添加到您正在迭代的数组中。也许你打算做
this.objects[i] = object;
欢迎来到 Stack Overflow,祝您学习愉快!