如何为数组元素赋值并关联国旗名称,实现猜图游戏输入校验?
解决方案
核心思路是把国旗路径和对应国家名称绑定存储,用对象数组来管理数据,这样随机抽取时能同时拿到图片和正确答案,方便和用户输入做对比。
步骤1:重构数据结构
把原来的单一路径数组改成对象数组,每个对象包含国旗路径和对应国家名称:
// main.js // 生成0-9的随机数(对应数组索引,避免越界) const randomNum = Math.floor(Math.random() * 10); // 对象数组:每个元素存国旗路径+对应国家名 const flags = [ { src: "../assets/flagImages/ad.png", country: "安道尔" }, { src: "../assets/flagImages/ae.png", country: "阿拉伯联合酋长国" }, { src: "../assets/flagImages/af.png", country: "阿富汗" }, { src: "../assets/flagImages/ag.png", country: "安提瓜和巴布达" }, { src: "../assets/flagImages/ai.png", country: "安圭拉" }, { src: "../assets/flagImages/al.png", country: "阿尔巴尼亚" }, { src: "../assets/flagImages/am.png", country: "亚美尼亚" }, { src: "../assets/flagImages/ao.png", country: "安哥拉" }, { src: "../assets/flagImages/aq.png", country: "南极洲" }, { src: "../assets/flagImages/ar.png", country: "阿根廷" } ]; // 保存当前选中的正确答案,方便后续对比 let correctCountry = flags[randomNum].country;
步骤2:更新图片渲染逻辑
修改HTML里的脚本,渲染随机选中的国旗:
<!-- index.html --> <script> document.write(`<div id="flagImage"><img src="${flags[randomNum].src}" alt="Flag" width="250px"></div>`); </script>
步骤3:实现答案对比功能
添加输入框和按钮,监听用户提交事件,对比输入内容与正确答案:
<!-- index.html 新增交互区域 --> <input type="text" id="userInput" placeholder="输入国家名称"> <button onclick="checkAnswer()">提交答案</button> <p id="result"></p> <script> function checkAnswer() { const userInput = document.getElementById('userInput').value.trim(); const resultElement = document.getElementById('result'); // 转小写对比,忽略大小写差异 if (userInput.toLowerCase() === correctCountry.toLowerCase()) { resultElement.textContent = "答对了!"; resultElement.style.color = "green"; } else { resultElement.textContent = `答错了,正确答案是:${correctCountry}`; resultElement.style.color = "red"; } } </script>
小优化说明
- 用
Math.floor()替代Math.round():避免随机数出现超出数组范围的情况,确保索引始终在0-9之间 - 对比时统一转小写:提升用户体验,不用严格区分大小写
- 用
const/let替代全局变量:减少作用域冲突问题
内容的提问来源于stack exchange,提问作者Drew Kopp
相关产品推荐
相关产品推荐

