Замените один элемент в массиве объектов модели Angular другим объектом с помощью Angular2

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

    export interface modelCourse{
         var1: number;
         var2: number;
     }

Я хочу сделать что-то вроде этого:

    updateResults(myCourse: modelCourse) {
        this.allCourses.forEach(element => {
            if (myCourse.Id=== element.Id) {
                element = myCourse;  // this part doesn't work as expected
            }
        });
    }

Где

    allCourses: modelCourse[] = [];

И allCourses проводит все мои курсы.

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
1
183
2

Ответы 2

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

Затем вы можете использовать этот индекс для обновления исходного массива.

updateResults(myCourse: modelCourse) {
    const foundElementIndex = this.allCourses.findIndex(element => myCourse.id === element.id);
    this.allCourses[foundElementIndex] = myCourse;
}

Я сделал stackblitz здесь: https://stackblitz.com/edit/angular-hxxddn

Спасибо DeborahK. Однако я не понимаю, как это заменяет курс в моем массиве на myCourse?

M Jenkins 18.12.2018 20:39

Я сделал стекблитц. См. Исправленный ответ.

DeborahK 18.12.2018 20:40

Пожалуйста, используйте Array.map для обновления this.allCourses.

updateResults(myCourse: modelCourse) {
  this.allCourses = this.allCourses.map(element => {
      if (myCourse.Id === element.Id) {
          return myCourse;
      }
      return element;
  });
}

Другие вопросы по теме