Как проверить, содержит ли массив javascript свойство с определенным значением, если да, возвращает true - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть опция выбора - в угловых, и мне нужно проверить значения, которые имеют тот же идентификатор, что и идентификатор в базе данных, поэтому я попробовал что-то вроде этого:

isDropdownValueSelected(amf: ApplicationModuleForm): boolean {
    for (let i = 0; i < this.role.applicationForms.length; i++) {
      if (this.role.applicationForms[i].id == amf.id) {
        return true;
      }
      else {
        return false;
      }
    }
 }

Моя угловая часть:

<div class="col-lg-9">
     <select id="applicationModuleFormSelect" name="applicationModuleFormSelect" class="form-control multiselect-select-all" multiple="multiple" data-fouc>
        <option *ngFor="let amf of appModuleForms;" [value]="amf.id" [selected]="isDropdownValueSelected(amf)">{{amf.title}}</option>
     </select>
</div>

Так что в основном я хотел зациклить для каждого идентификатора в опции, и если бы я нашел подобное в моем массиве, я бы возвратил true, потому что массив this.role.applicationForms содержит значения из базы данных, но, к сожалению, это не работает, ничеговыбрано в выпадающем списке, и я проверил с консоль журнала, он говорит, что существует только 1 значение, даже если есть 3 ..

Спасибо, ребята, Cheers

Ответы [ 5 ]

0 голосов
/ 05 февраля 2019

Вам не нужен for цикл:

isDropdownValueSelected(amf: ApplicationModuleForm): boolean {
            if (this.role.applicationForms.find(x => x.id == amf.id)) {
                return true;
            }
            else {
                return false;
            }
        }
0 голосов
/ 05 февраля 2019

Используйте оператор some вместо зацикливания ваших элементов:

isDropdownValueSelected(amf: ApplicationModuleForm): boolean {
    return this.role.applicationForms.some(e => e.id === amf.id);
}
0 голосов
/ 05 февраля 2019

Эта функция работает только при совпадении идентификатора первого элемента, потому что вы возвращаете значение при каждой проверке.

Вы должны обновить код так:

isDropdownValueSelected(amf: ApplicationModuleForm): boolean {
    for (let i = 0; i < this.role.applicationForms.length; i++) {
        if (this.role.applicationForms[i].id == amf.id) {
            return true;
        }
    }
    return false;
}
0 голосов
/ 05 февраля 2019

Предполагая, что applicationForms является массивом, вы можете использовать метод some :

isDropdownValueSelected(amf: ApplicationModuleForm): boolean {
  return this.role.applicationForms.some(({id}) => id === amf.id);
}
0 голосов
/ 05 февраля 2019

Возможно, вам нужно переместить ложное значение в конец для возврата, потому что каждый оператор return завершает функцию.

isDropdownValueSelected(amf: ApplicationModuleForm): boolean {
    for (let i = 0; i < this.role.applicationForms.length; i++) {
        if (this.role.applicationForms[i].id == amf.id) {
            return true;
        }
    }
    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...