基于菜品数组对象值设置国旗表情变量的简洁实现方案问询
更简洁的国旗映射实现方案
当然有更简洁且易扩展的方案!你的问题核心是将字符串类型的菜系/国家标识映射到对应的国旗表情,用对象做映射表是最适合的场景——不仅代码更干净,后续添加新国家时也只需要在映射表里加一行就行,完全不用改逻辑。
优化后的实现代码
首先我们用一个键值对对象来存储origin和国旗的对应关系,替代原来的多个if判断:
// 定义origin到国旗的映射表,清晰直观 const flagMap = { german: '🇩🇪', greek: '🇬🇷', spanish: '🇪🇸', italian: '🇮🇹' }; const dishes = [ { dish: "pizza", origin: "italian" }, { dish: "tzatziki", origin: "greek" } ]; // 示例1:获取单个菜品的国旗(比如第一个菜品) const targetDish = dishes[0]; let flag = flagMap[targetDish.origin] || '🏳️'; // 用默认国旗兜底未匹配的情况 console.log(flag); // 输出: 🇮🇹 // 示例2:给所有菜品批量添加国旗属性 const dishesWithFlags = dishes.map(dish => ({ ...dish, flag: flagMap[dish.origin] || '🏳️' })); console.log(dishesWithFlags); // 输出: // [{ dish: "pizza", origin: "italian", flag: "🇮🇹" }, { dish: "tzatziki", origin: "greek", flag: "🇬🇷" }]
为什么这个方案更好?
- 扩展性拉满:就算要支持50个国家,也只需要在
flagMap里新增50个键值对,不用写一堆重复的if判断,维护成本极低。 - 可读性更强:一眼就能看懂每个
origin对应的国旗,逻辑清晰不混乱。 - 容错性更优:通过
|| '🏳️'可以给未匹配到的origin设置默认国旗,避免出现undefined的情况。
另外提一句:你原来的代码里chooseFlag(dishes.origin)是有问题的——dishes是数组,没有origin属性,应该访问数组中具体元素的origin(比如dishes[0].origin),或者遍历数组处理每个菜品哦。
内容的提问来源于stack exchange,提问作者andylib93
相关产品推荐
相关产品推荐

