Как сравнить массив объектов, используя angular8, используя реактивные формы - PullRequest
0 голосов
/ 19 февраля 2020

Я использовал реактивные формы, и значения присваиваются html, а реактивные формы связаны с массивом объекта. Итак, какое бы действие я ни выполнял, оно должно использоваться для сравнения объектов с существующим объектом. Поэтому я использовал один массив методов сравнения объектов. Но здесь предыдущее значение также связывается с новым значением, которое было присвоено форме.

Я хочу, чтобы вновь отредактированное значение и старое значение были разделены отдельно, чтобы я мог сравнить, если значения свойства объекта являются Затем я могу включить сохранение.

ДЕМО: ДЕМО

ТС:

saveDetails() {
 this.objectsAreSame(this.agentDetailsList, this.detailsToggle)
      console.log(this.agentDetailsList);
      console.log(this.detailsToggle);
      console.log(this.objectsAreSame,"this.objectsAreSame")
    }

      objectsAreSame(a1, a2) {
    for (var i = 0, len = a1.length; i < len; i++) {
      for (var j = 0, len = a2.length; j < len-1; j++) {
          if (a1[i].boolValue == a2[j].boolValue) {
              return false
          } else {
            return true
          }
      }
  }
}

ФОРМА:

  private settingsInfoForm() {
    if (!this.agentDetailsList) {
      // Add
      this.agentSettingsInfoForm = this.FB.group({

        agentToogles: this.FB.array([this.detailsToggle]),
      });
      // this.authService.setDetailsData(this.agentSettingsInfoForm);
    } else {
      // Edit
      if (this.agentDetailsList) {
       this.detailsToggle = this.agentDetailsList
       this.agentSettingsInfoForm = this.FB.group({
          agentToogles: this.FB.array([this.detailsToggle]),
      })
      }
        let settingsInfo = this.agentSettingsInfoForm.valueChanges.subscribe(data => {
          this.formEdit = true;
          console.log('agentSettingsInfoForm', this.formEdit)
        })
}

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

Я пытался понять ваш код, и это было для меня немного трудным, так как я также довольно новичок в Angular.

Реактивные формы в angular - это концепция, над которой лучше всего работать с наблюдаемыми , Rx Js представляется важным при проверке изменений в FormGroups: https://rxjs-dev.firebaseapp.com/api

Angular do c для наблюдаемых: https://angular.io/guide/observables

Я знаю, что это не так просто для понимания документов.

В коде я пытаюсь показать вам, как инициировать FormGroups с помощью Formbuilder и прослушивать изменения в вашей форме. В разделе подписки вы видите мое сравнение с вашим объектом и вход в консоль.

Я надеялся, что смогу вам помочь. Не стесняйтесь спрашивать в комментариях. StackDemo: https://stackblitz.com/edit/angular-58vovb

0 голосов
/ 19 февраля 2020

Вы можете использовать функцию Array.prototype.reduce для сравнения объектов. Он циклически перебирает все элементы первого массива и начинается с начального значения true. Если элемент с текущим индексом существует во втором массиве, он возвращает перекрытие всех предыдущих сравнений и текущих элементов на index. Если он не существует, он возвращает ложь. Если одно значение равно false, результат равен false.

compare(
  array1.map(item => item.boolValue),
  array2.map(item => item.boolValue)
);

function compare(arr1: Array<boolean>, arr2: Array<boolean>) {
  return arr1.reduce((acc, cur, index) => acc && cur === arr2[index], true);
}
...