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

Oracle APEX交互式网格:如何不用forEach获取某列全部记录

在Oracle APEX交互式网格中用普通for循环获取列值并检查重复

核心实现步骤

  1. 定位交互式网格并获取数据模型:Oracle APEX的交互式网格(IG)数据存储在内部模型中,需先通过IG的静态ID获取模型对象。
  2. 用标准for循环遍历记录:通过模型的getRecords()方法拿到所有行数据,使用普通for循环(而非forEach)逐个读取目标列的值。
  3. 收集值并检测重复:借助临时对象存储已出现的列值,遍历过程中判断当前值是否存在,以此识别重复项。

完整代码示例

假设你的交互式网格静态ID为emp_ig,年龄列的静态ID为AGE,可直接使用以下代码:

// 获取交互式网格的模型对象
const igModel = apex.region("emp_ig").widget().interactiveGrid("getViews", "grid").model;
// 获取所有行记录数组
const allRecords = igModel.getRecords();
// 存储已出现的年龄,用于检测重复
const ageTracker = {};
// 存储检测到的重复年龄
const duplicateAges = [];

// 普通for循环遍历所有记录
for (let i = 0; i < allRecords.length; i++) {
    // 读取当前行的年龄值,替换"AGE"为你的列静态ID
    const currentAge = allRecords[i].get("AGE");
    
    // 跳过空值(可根据需求移除该判断)
    if (currentAge == null) {
        continue;
    }
    
    // 检查年龄是否已存在
    if (ageTracker[currentAge]) {
        // 避免重复添加同一值到重复列表
        if (!duplicateAges.includes(currentAge)) {
            duplicateAges.push(currentAge);
        }
    } else {
        // 首次出现的年龄,存入追踪对象
        ageTracker[currentAge] = true;
    }
}

// 输出结果到控制台
console.log("所有年龄值:", Object.keys(ageTracker));
console.log("重复的年龄:", duplicateAges);

关键细节提示

  • 静态ID替换:必须将代码中的emp_ig(IG的静态ID)和AGE(列的静态ID)替换为你项目中的实际值。
  • 未提交数据兼容:model.getRecords()会包含IG中未提交的修改数据,若只需已保存数据,可调整为获取模型的getSavedRecords()。
  • 空值处理:代码中的空值跳过逻辑可根据业务需求保留或删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:12:11