首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角:如何处理数组中的外键

角:如何处理数组中的外键
EN

Stack Overflow用户
提问于 2020-01-19 04:06:27
回答 1查看 702关注 0票数 0

我有一个mealmealplan类。每个进餐计划都有一个由五个外键组成的数组,其中引用了就餐对象。

代码语言:javascript
复制
export class Meal {
  id: number;
  name: string;
}

export class Mealplan {
  id: number;
  mealsPerWeek: Meals[] = new Array(5);
}

所有数据都从这样的角度存储在内存中的数据服务中:

代码语言:javascript
复制
export class InMemoryDataService implements InMemoryDbService {
  createDb() {
    const meals = [
      {
        id: 101,
        name: 'Meal 1',
        price: 18.00,
      },
      {
        id: 102,
        name: 'Meal 2',
        price: 20.00,
      },
    ]; 
    const mensaplan = [
      {id: 1, mealsPerWeek: [101, 102, 103, 104, 105]},
      {id: 2, mealsPerWeek: [105, 104, 103, 102, 101]}
    ];

return {meal, mealplan};

Mensaplan.service.ts:

代码语言:javascript
复制
export class MealPlanService {

  private mealplanUrl = 'api/meaplan';

  constructor(private http: HttpClient) {
  }

  getMealplan(): Observable<Mealplan[]> {
    return this.http.get<Mealplan[]>(this.mealplanUrl)
  }
}

mealplan.component.ts

代码语言:javascript
复制
 getMealplan(): void {
   this.mealplanService.getMealplan()
     .subscribe(mealplan => this.mealplan = mealplan);
 }
}

如果我现在用{{mealplan.mealsPerWeek}}在模板中呈现它,我只会得到数组101,102,103,104,105

处理is数组以显示类meal属性的最佳方法是什么

结果应该是

MealPerWeek:餐1(价格),餐2(价格)等。

EN

回答 1

Stack Overflow用户

发布于 2020-01-19 05:13:16

例如,使用Map而不是Object :迭代和获取餐的值很容易

代码语言:javascript
复制
const meals =  new Map([
  [101, {name:'Meal 1',price:18.00}],
  [102, {name:'Meal 2',price:20.00}],
  [103, {name:'Meal 3',price:17.00}],
  [104, {name:'Meal 4',price:22.00}],
  [105, {name:'Meal 5',price:17.00}],
  [106, {name:'Meal 6',price:29.00}],
]);
    const mensaplan = [
      {id: 1, mealsPerWeek: [101, 102, 103, 104, 105]},
      {id: 2, mealsPerWeek: [105, 104, 103, 102, 101]}
    ];


function greeter(plan) {
let val = "";
for(let i=0;i<plan.length;i++){
const name = meals.get(plan[i].mealsPerWeek[0]).name;
const price = meals.get(plan[i].mealsPerWeek[0]).price;
val +='Meal ID '+plan[i].id+'meals name '+name+' price '+price+'<br>';
}
 return val;
}


document.querySelector("#app").innerHTML = greeter(mensaplan);
代码语言:javascript
复制
body {
  background: #20262E;
  padding: 20px;
  font-family: Helvetica;
}

#app {
  background: #fff;
  border-radius: 4px;
  padding: 20px;
  transition: all 0.2s;
  text-align: center;
}
代码语言:javascript
复制
<div id="app"></div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59807073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档