Array.find работает только с постоянным значением в компараторе - Typescript - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь получить элемент из массива:

const device = this.selectedDevtype.devices.find(item =>
    console.log(this.deviceID);
    return item.device_id === this.deviceID;
});
console.log(device);

Журнал консоли записывает «4» для this.deviceID и возвращает неопределенное значение device.

Ошибка журнала

Но если я поставлю жестко закодированное значение, это сработает:

const device = this.selectedDevtype.devices.find(item =>
    console.log(this.deviceID);
    return item.device_id === 4;
});
console.log(device);

Журнал в порядке

Почему первая функция не работает? В чем ошибка? Спасибо.

Моя машинописная версия 2.6.2, я работаю над Angular 5.


По сути, я сравниваю строку и число. Сожаление, что я объявил тип в классе компонента:

deviceID: number;

радиогруппа углового материала меняла тип переменной на строку:

<mat-radio-group [(ngModel)]="deviceID" (change)="updateDevice()">
  <mat-radio-button fxFlex="50"
    *ngFor="let device of selectedDevtype.devices" value="{{ device.device_id }}">
    [{{ device.key }}]{{ device.name }}
  </mat-radio-button>
</mat-radio-group>

Может быть, это может кому-то помочь.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Вы уверены, что не сравниваете строку с целым числом?

Попытка:

const device = this.selectedDevtype.devices.find(item => +item.device_id === +this.deviceID)
0 голосов
/ 14 ноября 2018

Кажется, что item.device_id не равно 4 в любом случае.

Метод find () возвращает значение первого элемента в массиве, который удовлетворяет предоставленной функции тестирования,В противном случае возвращается undefined.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...