打字稿使用Map或Object

时间:2018-07-23 15:55:39

标签: javascript html angular typescript

我目前正在使用基本的Pizza Delivery应用程序。因此,您单击所需的披萨,它将被添加到将结果分组的列表中。

因此它应该显示:

玛格丽塔披萨2x 披萨萨拉姆1x

我考虑过要制作一个像Map<Pizza, number>这样的地图,其中比萨饼是我的对象,数字是数量。

但是,这感觉不对。另外,我无法通过ngFor进行迭代。

因此创建一个对象不是很容易,例如: {“ pizza”:披萨,“ amount”:2}并将其放入数组?

1 个答案:

答案 0 :(得分:2)

这完全取决于您的用例。

  

因此创建对象不是很容易,例如:{“ pizza”:   披萨,“金额”:2},然后将其放入数组中?

如果要从数组中获取特定项目并且不知道索引,则必须搜索该数组。

Map的好处在于您可以快速查找并且可以将Object用作键,而不仅仅是String

class Pizza {};

// Using Map
const orderMap = new Map();
const margaritaPizza = new Pizza();
const salamePizza = new Pizza();

orderMap.set(margaritaPizza, 2);
orderMap.set(salamePizza, 1);

console.log(`Margarita ammount: ${orderMap.get(margaritaPizza)}`);
console.log(`Salame ammount: ${orderMap.get(salamePizza)}`);

// Using Array
const orderArr = [];

orderArr.push({
  pizza: "margaritaPizza",
  ammount: 2
});

orderArr.push({
  pizza: "salamePizza",
  ammount: 1
});

console.log(`Margarita ammount: ${orderArr.find(el => el.pizza === "margaritaPizza").ammount}`);
console.log(`Salame ammount: ${orderArr.find(el => el.pizza === "salamePizza").ammount}`);


此外,您说:

  

我考虑过要制作一个像“我的比萨饼”这样的地图   对象,数字就是数量。

     

但是,这感觉不对。我也不能用ngFor进行迭代   通过它。

Map实现了@@iterator,可以使用Array转换为普通的Array.from()