Code.org作业问题:如何根据选中艺术家过滤歌曲列表
问题分析与修复方案
代码里的核心错误
- 过滤逻辑完全错位:你现在拿歌曲名数组和艺术家数组做相等判断,这两个完全不是同一类数据,根本不可能匹配上。正确逻辑应该是:遍历艺术家数据集,当某个位置的艺术家等于你选中的目标艺术家时,把对应位置的歌曲名加入结果列表。
- 冗余的数组存储:你只随机选了一位艺术家,没必要用
filteredArtist数组来存,直接用artistName变量就足够。
修正后的代码
function artistPicker() { var index; filteredSongName = []; // 随机获取一个艺术家的索引 index = randomNumber(0, artistData.length - 1); var artistName = artistData[index]; // 遍历数据集,筛选对应艺术家的所有歌曲 for (var i = 0; i < artistData.length; i++) { // 检查当前索引的艺术家是否和选中的一致 if (artistData[i] == artistName) { appendItem(filteredSongName, songNameData[i]); } } setScreen("displayScreen"); // 优化显示格式,让结果更易读 setText("textOutput", artistName + "的歌曲:\n" + filteredSongName.join(", ")); }
修正说明
- 移除了不必要的
filteredArtist数组,直接用artistName存储选中的艺术家 - 把循环内的判断条件改成
artistData[i] == artistName,确保能匹配到对应艺术家的歌曲 - 用
join(", ")把歌曲数组转换成逗号分隔的字符串,加上换行让显示结果更清晰
内容的提问来源于stack exchange,提问作者Kavro
相关产品推荐
相关产品推荐

