如何在Code.org环境下用JS仅通过数组、整数筛选列表唯一值?
提取列表唯一值(Code.org受限环境)
我需要从locations列表中提取唯一值,存入filteredLocations这个无重复的列表。但学校的Code.org平台限制了很多常用函数,没法用.filter()、.includes()、.push()这类方法。
我曾尝试以下代码:
第一个版本:
function contains(city) { appendItem(filteredLocations, locations[0]); for (var i = 0; i < locations.length; i++); if (filteredLocations[i] != city){ appendItem(filteredLocations, locations[i]); } else { i++; } }
第二个版本:
function fillDropdowns(){ //filter the cities for (var i = 0; i < locations.length;i++){ if (contains(locations[i]) == true) { appendItem(filteredLocations, locations[i]); } else { i++; } } //locations list } function contains(city) { for (var i = 0; i < filteredLocations.length; i++); if (filteredLocations[i] == city){ return true; } }
修正后的可行方案
以下是适配Code.org环境的正确实现:
首先实现一个检查元素是否存在的函数:
function contains(city) { for (var i = 0; i < filteredLocations.length; i++) { if (filteredLocations[i] == city) { return true; } } return false; }
然后实现填充唯一值列表的主函数:
function fillDropdowns() { // 清空目标列表,避免重复执行时积累旧数据(可选,根据需求调整) setLength(filteredLocations, 0); for (var i = 0; i < locations.length; i++) { var currentCity = locations[i]; // 仅当当前城市未在目标列表中时添加 if (!contains(currentCity)) { appendItem(filteredLocations, currentCity); } } }
问题说明
你之前的代码主要问题:
- 循环语句末尾多了分号,导致循环体根本不会执行,直接跳转到后面的if判断。
contains函数没有处理"未找到元素"的情况,不会返回false,导致判断逻辑失效。fillDropdowns里手动i++会跳过部分元素,for循环本身会自动递增索引。
内容的提问来源于stack exchange,提问作者Erin Yeh
相关产品推荐
相关产品推荐

