You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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);
    }
  }
}

问题说明

你之前的代码主要问题:

  1. 循环语句末尾多了分号,导致循环体根本不会执行,直接跳转到后面的if判断。
  2. contains函数没有处理"未找到元素"的情况,不会返回false,导致判断逻辑失效。
  3. fillDropdowns里手动i++会跳过部分元素,for循环本身会自动递增索引。

内容的提问来源于stack exchange,提问作者Erin Yeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 14:40:30