Как отфильтровать массив и вернуть весь объект - Angular - PullRequest
0 голосов
/ 12 сентября 2018
export class ResultComponent {
    students: AdmissionFormData[]

    constructor(private adStudent: AdmissionFormService) {
        adStudent.adFormGet().subscribe(
            x => this.students = x
        )
    }

    onSubmit(value) {

    }
}

В массиве студентов у меня есть данные.И onSubmit - это функция, а значением является параметр "roll"

, а в HTML-файле:

<div class="form">
<div class="col-md-5 offset-md-3">
  <div class="card">
      <div class="card-header text-center">
          <h3 id="form_name" >Search Result</h3>
      </div>

      <div class="card-block">
          <form (ngSubmit)="onSubmit(f.value)" #f="ngForm" >
              <div class="form-group">
                <label for="">Roll</label>
                <input
                type="number" 
                ngModel
                name="reg" 
                #reg="ngModel" 
                [min]="99999"
                placeholder="Ex: 224697"
                class="form-control">
                <p class="text-danger" *ngIf="!reg.valid && reg.touched">Roll Should have at least 6 letter</p>
              </div>
              <input 
              type="submit"
              value="Search" 
              class="btn btn-block btn-outline-success">
          </form>
      </div>
  </div>

The array

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

Теперь, как я могу это сделать?

Я думаю, что я сделал ошибку раньше, поэтому я редактирую вопрос.Пожалуйста, прости меня, я новичок здесь.

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

return this.students.filter(s => s.reg === value)

Здесь s - это объект ученика, и вы фильтруете объекты, чьи значения reg соответствуют value из onSubmit(value).

.вернуть массив объектов с указанными значениями reg.

0 голосов
/ 12 сентября 2018
export class ResultComponent {
    students: AdmissionFormData[]

    constructor(private adStudent: AdmissionFormService) {
        adStudent.adFormGet().subscribe(
            x => this.students = x
        )
    }

    onSubmit(value):AdmissionFormData[] {
     return this.students.filter(student => student.reg === value)
    }
}

Я вижу на ваших первых двух объектах, что они имеют одинаковый номер рег. Если вам нужно вернуть только один объект, вы должны использовать find, потому что фильтр вернет все совпадения. Я также указал тип возвращаемого значения, потому что это хорошая практика.

onSubmit(value):AdmissionFormData[] {
   return this.students.find(student => student.reg === value)
}

UPDATE

Мой код работает для того, что вы просили, фильтрации. Я создал стек с вашими формами, используя поддельные данные, и я получил возможность фильтровать массив. Одна из проблем, почему мой код не работал, заключается в том, что вы передаете объект, а не строку, но я не знал этого, потому что у вас не было HTML. Посмотрите на мой https://stackblitz.com/edit/angular-nt2ksu и посмотрите, как я справлюсь с этим

0 голосов
/ 12 сентября 2018

Вы можете использовать array.filter со свойством, которое хотите отфильтровать, так как вы не упомянули это свойство, принимая его как fullname

this.students = this.students.filter(t=>t.fullname ===roll)[0];

или, если вы хотите один объект, используйте array.find

let studentObj =  this.students.find(t=>t.fullname ===roll);
...