Object.assign - Объект с несколькими значениями - PullRequest
0 голосов
/ 17 мая 2018

Как бы я передавал Object.assign динамически?

Предположим, это мой объект:

this.driverForm.value.drivers

0:{last_name: "Are", first_name: "", gender: "", dob: "", address: "", …}

Теперь я могу легко назначать такие объекты:

 const submittedForm = Object.assign(
        {}, this.driverForm.value.drivers[0],
 );

Но как бы я назначил объекты, если мои значения изменятся следующим образом:

0:{last_name: "Are", first_name: "", gender: "", dob: "", address: "", …}

1:{last_name: "Wert", first_name: "", gender: "", dob: "", address: "", …}

Вот полный код

saveNewDriver() {
    console.log(this.driverForm.value.drivers,'driver save');
    const submittedForm = Object.assign(
        {}, this.driverForm.value.drivers[0], {enable: true},
        {checked: false},
    );
    this.store.select('drivers').dispatch(new createDriver(submittedForm));
}

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Полагаю, вы не хотите видоизменять this.driverForm и добавлять новый элемент в this.driverForm.value.drivers

this.driverForm = Object.assign(
  {},
  this.driverForm,
  {value:Object.assign(
    {},
    this.driverForm.value,
    {drivers:this.driverForm.value.drivers.concat(newDriver)}
  )}
)

С оператором распространения это будет выглядеть так:

this.driverForm = {
  ...this.driverForm,
  value:{
    ...this.driverForm.value,
    drivers:this.driverForm.value.driverForm.concat(newDriver)
  }
}
0 голосов
/ 17 мая 2018

Не знаю, правильно ли я поступил, но я заставляю его работать

 saveNewDriver() {
    const myarray = this.driverForm.value.drivers;
    const submittedForm = myarray.map(a => ({...a, enable: true, checked: false}));
    submittedForm.forEach(driver => {
        this.store.select('drivers').dispatch(new createDriver(driver));
    });
}

Пожалуйста, дайте мне знать более элегантное решение

0 голосов
/ 17 мая 2018

Поскольку вам следует избегать смешивания числовых свойств, таких как '0' из массива, и именованных свойств, таких как 'enable', я настоятельно рекомендую вам создать массив на основе каждого объекта драйвера:

saveNewDriver() {
    console.log(this.driverForm.value.drivers,'driver save');
    const submittedForms = this.driverForm.value.drivers.map(driver => 
            Object.assign({},
                driver,
                {enable: true},
                {checked: false}
            );
    );
    submittedForms.forEach(form => {
        this.store.select('drivers').dispatch(new createDriver(form));
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...