Сравните 2 массива объектов, проверьте значение, которое соответствует

avatar
user16619763
9 августа 2021 в 03:11
165
1
-1

Как установить флажок в таблице, отмеченный по умолчанию, если есть совпадение в 2 объектах? . У меня есть 2 объекта: 1 выбран массив объектов NewUser и массив объектов transactionUserTable.data из API.

Я хочу сравнить, совпадает ли каждый адрес электронной почты в массиве объектов transactionUserTable.data с адресом электронной почты массива объектов selectedNewUser, если есть совпадение или адрес электронной почты равен, затем установите значение флажка как отмеченное.

Кто-нибудь может мне помочь, как это возможно? Если у кого есть решения или идеи. Спасибо и хорошего дня.

Сравните каждый объект selectedNewUser emailAddress с transactionUserTable.data emailAddress

#новые добавленные пользователи

selectedNewUser = [
    {
        "emailAddress": "aaa@gmail.com",
        "firstName": "aa",
        "lastName": "aa",
        "phoneNumber": "232",
        "companyName": "bb",
        "title": "CEO",
        "roleId": 7,
        "associatedAccount": "WLGRN",
        "accountId": 4,
        "roles": [
            {
                "id": 12,
                "name": "Architect",
                "isShow": true,
                "transactionRoleId": 12
            },
            {
                "id": 11,
                "name": "Construction Project Director",
                "isShow": true,
                "transactionRoleId": 11
            }
        ]
    },
    {
        "emailAddress": "bbb@gmail.com",
        "firstName": "bb",
        "lastName": "vv",
        "phoneNumber": "34",
        "companyName": "test",
        "title": "CEO",
        "roleId": 7,
        "associatedAccount": "WLGRN",
        "accountId": 4,
        "roles": [
            {
                "id": 12,
                "name": "Architect",
                "isShow": true,
                "transactionRoleId": 12
            },
            {
                "id": 11,
                "name": "Construction Project Director",
                "isShow": true,
                "transactionRoleId": 11
            }
        ]
    }
]

#html код для флажка

 <div class="table" [ngStyle.gt-md]="{'overflow': 'auto'}">
        
        <mat-table [dataSource]="transactionUserTable.dataSource" [@animateStagger]="{value:'50'}" matMultiSort
            (matSortChange)="transactionUserTable.onSortEvent()">
            <!-- action Column -->
            <ng-container matColumnDef="action">
                <mat-header-cell *matHeaderCellDef> Action - Checkbox</mat-header-cell>
                <mat-cell *matCellDef="let item" fxLayoutAlign="center center">

                    <mat-checkbox [checked]="userSelectedStatus(item)" color="primary" [disableRipple]="true"
                        (change)="appendUserList($event,item)"></mat-checkbox>
                        
                </mat-cell>
            </ng-container>

#Код, извлекающий список пользователей

private _transactionUserPageEvent() {
    this.isTransactionUserLoading = true;
    this.transactionUserTable.data = [];
    this._userProfileService.getUserProfileTableDropdown(
      this.accountId,
      this.transactionUserTable.pageIndex + 1,
      this.transactionUserTable.pageSize,
      this.searchTransactionUserInput.nativeElement.value,
      this.transactionUserTable.sortParams,
      this.transactionUserTable.sortDirs
    )
      .pipe(
        finalize(() => this.isTransactionUserLoading = false)
      )
      .subscribe({
        error: err => this._notificationService.showError(err),
        next: res => {
          console.log("new users"  , this.selectedNewUser)
          this.transactionUserTable.totalElements = res.totalItemCount;
          this.transactionUserTable.data = res.items as UserProfileDropdownDto[];
          this.totalData = res.totalItemCount;
          this.currentDisplayedData = res.lastItemOnPage;
        },
        complete: noop
      });
  }

#Пример данных списка пользователей из API (transactionUserTable.data)

[
    {
        "id": 90085,
        "fullName": "1a 1a",
        "roleDisplay": null,
        "firstName": "1a",
        "lastName": "1a",
        "emailAddress": "aaa@gmail.com",
        "phoneNumber": "fsdfsd",
        "companyName": "test",
        "title": "CEO",
        "lastLogin": null,
        "createdDate": "08/08/2021 11:20:25 pm",
        "isVerified": false,
        "roleDto": null,
        "status": "Active",
        "securityRole": "Unlicensed User",
        "lastLoggedIn": "",
        "teamCount": 0,
        "transactionRoleList": null
    },
    {
        "id": 90086,
        "fullName": "1a 1bb",
        "roleDisplay": null,
        "firstName": "1a",
        "lastName": "1bb",
        "emailAddress": "bbb@gmail.com",
        "phoneNumber": "32423",
        "companyName": "dcbvc",
        "title": "vsvfd",
        "lastLogin": null,
        "createdDate": "08/08/2021 11:25:59 pm",
        "isVerified": false,
        "roleDto": null,
        "status": "Active",
        "securityRole": "Unlicensed User",
        "lastLoggedIn": "",
        "teamCount": 0,
        "transactionRoleList": null
    },
    {
        "id": 90084,
        "fullName": "1aaa aaa",
        "roleDisplay": null,
        "firstName": "1aaa",
        "lastName": "aaa",
        "emailAddress": "1aaa@gmail.com",
        "phoneNumber": "asdas",
        "companyName": "dfvdf",
        "title": "CEO",
        "lastLogin": null,
        "createdDate": "08/08/2021 10:32:49 pm",
        "isVerified": false,
        "roleDto": null,
        "status": "Active",
        "securityRole": "Unlicensed User",
        "lastLoggedIn": "",
        "teamCount": 0,
        "transactionRoleList": null
    },
    {
        "id": 40108,
        "fullName": "1aaaa@gmail.com 1aaaa@gmail.com",
        "roleDisplay": null,
        "firstName": "1aaaa@gmail.com",
        "lastName": "1aaaa@gmail.com",
        "emailAddress": "1aaaa@gmail.com",
        "phoneNumber": "1",
        "companyName": "1aaaa@gmail.com",
        "title": "1aaaa@gmail.com",
        "lastLogin": null,
        "createdDate": "06/08/2021 1:22:50 pm",
        "isVerified": false,
        "roleDto": null,
        "status": "Active",
        "securityRole": "Unlicensed User",
        "lastLoggedIn": "",
        "teamCount": 0,
        "transactionRoleList": null
    },
    {
        "id": 70083,
        "fullName": "23 asdasd",
        "roleDisplay": null,
        "firstName": "23",
        "lastName": "asdasd",
        "emailAddress": "asdasasdas",
        "phoneNumber": "adasda",
        "companyName": "asdasd",
        "title": "assdasda",
        "lastLogin": null,
        "createdDate": "08/08/2021 7:28:05 pm",
        "isVerified": false,
        "roleDto": null,
        "status": "Active",
        "securityRole": "Unlicensed User",
        "lastLoggedIn": "",
        "teamCount": 0,
        "transactionRoleList": null
    }
]
Источник

Ответы (1)

avatar
CodeWarrior
9 августа 2021 в 04:27
0

В вашем UserProfileDropdownDto добавьте свойство с именем checked и по умолчанию false при его инициализации. Затем в вашем цикле subscribe из getUserProfileTableDropdown через res.items

res.items.forEach(item => {
  if(item.emailAddress && selectedNewUser.findIndex((x: any) => x.emailAddress === item.emailAddress) !== -1){
    item.checked = true;
  }
});

Затем обновите код матового флажка следующим образом:

<mat-checkbox [checked]="item.checked" color="primary" [disableRipple]="true" (change)="appendUserList($event,item)"></mat-checkbox>
user16619763
9 августа 2021 в 04:51
0

В чем проблема, сэр, свойство «emailAddress» не существует для типа «BaseModel». ts (2339)

CodeWarrior
9 августа 2021 в 04:57
0

Я не уверен. Где используется BaseModel.ts и какова его структура?

CodeWarrior
9 августа 2021 в 05:12
0

Как он используется в коде, который вы разместили в своем вопросе?

user16619763
9 августа 2021 в 05:20
0

Я не использовал базовую модель для компонента, я не знаю, почему он называется

CodeWarrior
9 августа 2021 в 05:24
0

Вам придется отладить его, нет никакого способа ответить на этот вопрос, не глядя на код.

user16619763
9 августа 2021 в 05:26
0

imgur.com/a/HqPPja8 , я думаю, потому что есть глобальный обработчик для основанной модели, который, как вы можете видеть, содержит элементы: BaseModel[];

CodeWarrior
9 августа 2021 в 05:27
1

Да, но почему он ожидает атрибут emailAddress в baseModel.ts?

user16619763
9 августа 2021 в 05:28
0

потому что мы пытаемся получить доступ к элементам? который находится на baseModel?

user16619763
9 августа 2021 в 05:29
0

imgur.com/a/6c13ANr , это данные, когда я пытался выполнить console.log("res", res)

CodeWarrior
9 августа 2021 в 05:30
1

Но элементы имеют тип UserProfileDropdownDto

user16619763
9 августа 2021 в 05:31
0

Я также позвонил в PageModel на сервисе imgur.com/a/6c13ANr

user16619763
9 августа 2021 в 05:34
0

Но на сервисе использовал pagemodel imgur.com/a/ZLWlro4

CodeWarrior
9 августа 2021 в 05:35
1

Можете ли вы как-то поделиться своим кодом? По другому действительно сложно понять.

user16619763
9 августа 2021 в 05:39
0

stackblitz.com/edit/free-vicovb? Привет, пожалуйста, проверьте это, сэр

user16619763
9 августа 2021 в 05:57
0

Я все еще не могу получить доступ к данным, все та же проблема

CodeWarrior
9 августа 2021 в 06:21
1

Код все еще неполный, так как я не вижу доступа ни к PagedModel, ни к BaseModel в предоставленном коде.

user16619763
9 августа 2021 в 06:31
0

доступ к модели страницы осуществлялся через службу, если вы отметите службу getUserProfileTableDropdown

user16619763
9 августа 2021 в 06:47
0

Да, сэр, но у меня есть другая проблема imgur.com/a/DiZMYjs, я получил эту ошибку на моем this.selectedNewUser

user16619763
9 августа 2021 в 06:47
0

Свойство "emailAddress" не существует для типа "Object".ts(2339)

CodeWarrior
9 августа 2021 в 06:49
1

Проверьте this.selectedNewUser, похоже, что у него нет свойства с именем emailAddress.

user16619763
9 августа 2021 в 06:52
0

imgur.com/a/MldPNP5 у него есть, сэр, это доказательство