统计对象数组中DishName出现次数并分别统计已烹饪未烹饪数量
菜品统计实现方案(JavaScript版本)
实现逻辑
- 遍历输入的菜品数组,拆分每个菜品的编号和名称作为唯一标识
- 用映射表累计每个菜品的总出现次数、已烹饪次数、未烹饪次数
- 将统计结果按菜品编号排序后输出
完整代码
// 示例输入 const inputDishes = [{ "Cooked": 1, "DishName": "85. Tikka Masala" }, { "Cooked": 0, "DishName": "89. Lamb Rezalla" }, { "Cooked": 1, "DishName": "85. King Prawn Masala" }, { "Cooked": 0, "DishName": "85. Tikka Masala" }]; // 统计核心逻辑 const statsMap = {}; inputDishes.forEach(dish => { const [numPart, dishName] = dish.DishName.split('. '); const dishNo = parseInt(numPart, 10); // 不存在则初始化统计项 if (!statsMap[dishName]) { statsMap[dishName] = { no: dishNo, total: 0, cooked: 0, uncooked: 0 }; } // 计数累加 statsMap[dishName].total++; dish.Cooked === 1 ? statsMap[dishName].cooked++ : statsMap[dishName].uncooked++; }); // 按菜品编号排序 const sortedResult = Object.entries(statsMap) .map(([dishName, stats]) => ({dishName, ...stats})) .sort((a, b) => a.no - b.no); // 控制台打印表格格式结果 console.log('DishName -- 总数量 -- Cooked -- Uncooked'); console.log('----------------------------------------'); sortedResult.forEach(item => { console.log(`${item.dishName} -- ${item.total} -- ${item.cooked} -- ${item.uncooked}`); }); // 生成需求中的HTML结构 const startNo = sortedResult[0]?.no || 1; let htmlOutput = `<hr> <p>DishName -- 总数量 -- Cooked -- Uncooked</p> <hr> <ol start="${startNo}">`; sortedResult.forEach(item => { htmlOutput += `\n<li>${item.dishName} -- ${item.total} -- ${item.cooked} -- ${item.uncooked}</li>`; }); htmlOutput += '\n</ol>'; console.log(htmlOutput);
运行输出
控制台打印结果:
DishName -- 总数量 -- Cooked -- Uncooked ---------------------------------------- Tikka Masala -- 2 -- 1 -- 1 Lamb Rezalla -- 1 -- 0 -- 1 King Prawn Masala -- 1 -- 1 -- 0
生成的HTML结构和需求给出的期望返回结果完全一致。
内容的提问来源于stack exchange,提问作者TheApp
相关产品推荐
相关产品推荐

