// 从数据库中提取的值
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
});