Oracle APEX动态动作:页面项转数组键值查询报错修复
解决“find is not a function”错误的步骤
错误原因
你直接对JSON字符串调用了数组的find方法——$v('P10_PLOT_ARRAY')拿到的是页面项存储的JSON格式字符串,不是数组,自然没有find方法。另外你的原始JSON格式存在语法问题:value键没有用双引号包裹,这会导致后续JSON.parse解析失败。
修正步骤
1. 先修复页面项的JSON格式
确保P10_PLOT_ARRAY的JSON是标准格式,所有键名和字符串值都用双引号包裹:
P10_PLOT_ARRAY := '{"plots":[{"name":"Days on market Sydney (SUA) Houses", "value":"Bar" }, {"name":"Typical value Brisbane (SUA) Houses", "value":"Bar" }, {"name":"Typical value Melbourne (SUA) Houses", "value":"Line" }]}';
2. 修改JavaScript代码
解析JSON字符串为对象,取出plots数组后再使用find方法:
// 获取页面项的JSON字符串 let jsonStr = $v('P10_PLOT_ARRAY'); // 解析为可操作的JavaScript对象 let plotData = JSON.parse(jsonStr); // 从对象中取出目标数组 let plotsArray = plotData.plots; // 查找匹配的项 let targetPlot = plotsArray.find(function(item) { return item.name === "Typical value Melbourne (SUA) Houses"; }); // 处理查找结果 if (targetPlot) { apex.message.alert('value: ' + targetPlot.value); // 预期弹出"Line" } else { apex.message.alert('未找到匹配的项'); }
额外注意事项
- 必须通过
JSON.parse()把字符串转成JavaScript对象,才能访问内部的plots数组 - 标准JSON要求所有键名(比如
name、value)和字符串值都必须用双引号,单引号或无引号都会导致解析失败 - 可以增加数组校验,避免意外错误:
if (Array.isArray(plotsArray)) { // 执行find逻辑 } else { apex.message.alert('数据格式错误:plots不是数组'); }
内容的提问来源于stack exchange,提问作者PPa
相关产品推荐
相关产品推荐

