Map对象

// 从数据库中提取的值
this.responseData = req as FoodRecommendedAmountsClass[];

// 使用一个 Map 对象来按 food_group_name 组织数据
let groupedByFoodGroup = new Map<string, FoodRecommendedAmountsInter[]>();
this.responseData.forEach(item => {
  // 使用 get() 方法检查 Map 中是否存在该键
  let foodGroupArray = groupedByFoodGroup.get(item.food_group_name);
  if (!foodGroupArray) {
    // 如果不存在,则创建一个新数组并设置到 Map 中
    foodGroupArray = [];
    groupedByFoodGroup.set(item.food_group_name, foodGroupArray);
  }
  // 将新对象推送到数组中
  foodGroupArray.push({
    food_subgroup_name: item.food_subgroup_name,
    conversion_recommended_amounts: item.conversion_recommended_amounts,
    conversion_unit: item.conversion_unit,
    eating_cycle: item.eating_cycle,
  });
});

const result: FoodRecommendedAmountsClassFirst[] = Array.from(groupedByFoodGroup.entries()).map(entry => {
  const foodGroupName = entry[0]; // 获取键(food_group_name)
  const foodGroupArray = entry[1]; // 获取值(FoodRecommendedAmountsInter[])
  return {
    title: foodGroupName,
    childNodes: foodGroupArray,
  } as FoodRecommendedAmountsClassFirst;
});

// 输出结果
Logger.info(TAG, JSON.stringify(result, null, 2));

groupedByFoodGroup.entries()会返回一个迭代器,该迭代器会遍历Map对象中的所有键值对。每个键值对都会以数组的形式表示,其中数组的第一个元素是键(food_group_name),第二个元素是与该键相关联的值(FoodRecommendedAmountsInter[]类型的数组)。

Array.from()方法则负责将这个迭代器转换成一个真正的数组,以便我们可以使用map()方法对其进行处理。

map()方法会遍历由Array.from()生成的数组。每次遍历都会将一个键值对数组(即entry)作为参数传递给回调函数。

const foodGroupName = entry[0];

从entry数组中提取出键(即食物组名称)。

const foodGroupArray = entry[1];

从entry数组中提取出值(即属于该食物组的推荐食物量对象数组)。

返回一个对象,该对象符FoodRecommendedAmountsClassFirst类型的结构。这个对象包含两个属性:title(食物组名称)和childNodes(属于该食物组的推荐食物量对象数组)。

map.entries()

// 迭代 Map 中的 key => value 
for (let entry of nameSiteMapping.entries()) { 
console.log(entry[0], entry[1]); 
} 

Map对象foreach迭代

const map = new Map<string, number>();
map.set('one', 1);
map.set('two', 2);
console.log(map.get('one')); // 输出: 1
map.delete('one');
map.forEach((value, key) => {
  console.log(key, value); // 输出: two 2
});