【问题标题】:How do I assign the values of an object array to another object array that has more properties?如何将对象数组的值分配给另一个具有更多属性的对象数组?
【发布时间】:2021-12-07 19:26:49
【问题描述】:

我正在获取Workouts 的数组,并希望将其转换为RoutineWorkouts 的数组,该数组具有Workouts 以及"sets""reps" 的所有属性。然后我想将此数组显示为this page 上的列表,我可以在其中使用ion-select 分配代表和组。

create-routine.page.ts

 workoutR: any[];
 routineWorkouts: RoutineWorkout[] = [];
 sets = [2, 3, 4];
 reps = [4, 6, 8, 10, 12, 16, 20];

ionViewWillEnter(): void{
   this._subscription = this.workoutService.getMessage().subscribe((bWorkout:Workout[]) => {
     this._receivedWorkouts = bWorkout;
   });
   console.log(this._receivedWorkouts);
   this.workoutR = this._receivedWorkouts;  
 }

要在页面上显示它,我有*ngFor="let workout of workoutR"

锻炼和日常锻炼模型

export class Workout {
    id: number;
    name: string;
    muscle: string;
}
export class RoutineWorkout {
    id: number;
    name: string;
    sets: number;
    reps: number;
}

我试过this, but keep getting this error. 如何将我创建的数组的值分配为新的RoutineWorkouts,以便我可以分配代表和集合?

【问题讨论】:

  • RoutineWorkouts 具有锻炼的所有属性以及"sets""reps"。这是不正确的RoutineWorkout 不包含muscle 这是Workout 的一部分。
  • this._receivedWorkouts = bWorkout; 这是不可能的。您正在尝试将一个变量分配给另一个具有不同接口的变量。这可以在了解需求后通过一些工作来完成。
  • 那么您认为这将如何发生?是不是要从Workout 中取出idname 并将setsreps 设置为0
  • 是的,我想从现有的Workouts 数组中创建一个新数组RoutineWorkoutsidnameWorkout。在我分配之前,setsreps 将是 0

标签: arrays angular typescript object ionic-framework


【解决方案1】:

您不能将一种类型(接口)的变量分配给另一种类型。相反,您可以创建一个具有相同类型的新变量并将它们分配回所需的变量。

这里this.routineWorkouts 属于接口RoutineWorkout[]this._receivedWorkouts 属于Workout[] 类型

伪代码

const newReceivedWorkouts: RoutineWorkout[] = this._receivedWorkouts.map(({id, name}) => ({ id, name, sets: 0, reps: 0}))
this.routineWorkouts = newReceivedWorkouts;

这里this.routineWorkoutsnewReceivedWorkouts 属于同一类型,因此它们是可赋值的。

希望这对你有用。

【讨论】:

  • 在你回答之前,我实际上想出了这个:this.receivedWorkouts.map(item => { return {id: item.id, name: item.name, sets: 0, reps: 0 }}).forEach(item => this.routineWorkouts.push(item));,它奏效了!我也试过你的代码,它也有效。我会坚持我刚刚想出的那个,因为我了解我是如何做到的,但是您的回答更有帮助。谢谢!
  • 你很受欢迎。自学将始终帮助您理解这些概念。
猜你喜欢
  • 2019-07-16
  • 1970-01-01
  • 2020-08-20
  • 2018-09-23
  • 2019-10-18
  • 1970-01-01
  • 2020-04-21
  • 2019-07-29
  • 2022-11-10
相关资源
最近更新 更多