如何动态处理AJAX返回的JSON对象生成映射数组?
解决动态生成映射数组时的变量未定义问题
问题核心
静态声明newArray4、newArray6等数组时能正常生成,但循环动态创建newArray1这类变量时出现未定义,本质是动态变量名的作用域或声明方式错误,直接拼接变量名赋值容易触发JS的变量提升规则或作用域隔离问题。
推荐解决方案:用对象统一管理数组(避免全局变量污染)
放弃单独声明newArrayX这类零散变量,改用一个对象存储所有生成的数组,结构更清晰且不会出现未定义问题:
// 假设你需要处理的目标编号集合 const targetIds = [1, 4, 6, 7]; // 用对象统一存储所有映射后的数组 const resultArrays = {}; // 循环处理每个编号 targetIds.forEach(id => { // 生成对应数组,假设原数据中对应字段为measurement1、measurement4这类格式 resultArrays[`newArray${id}`] = retour.map(item => ({ date: timeConv(item.date), measurement: item[`measurement${id}`] })); }); // 使用时直接通过对象属性访问 console.log(resultArrays.newArray1); // 调用newArray1 console.log(resultArrays.newArray4); // 调用newArray4
兼容原有逻辑的方案:正确挂载全局变量(不推荐)
如果一定要保留newArrayX这类全局变量,需明确将变量挂载到全局对象(浏览器环境为window)上,避免作用域问题:
const targetIds = [1, 4, 6, 7]; targetIds.forEach(id => { const arrayKey = `newArray${id}`; // 直接挂载到window,确保全局可访问 window[arrayKey] = retour.map(item => ({ date: timeConv(item.date), measurement: item[`measurement${id}`] })); }); // 之后可直接使用newArray1 console.log(newArray1);
额外排查点
- 确认循环中的编号
id是否正确覆盖到1,避免漏处理目标编号 - 检查原数据
retour中是否存在对应字段(比如measurement1),字段名拼写错误会导致数组内容异常 - 验证
timeConv函数是否正常返回值,若函数抛出异常会中断数组生成
内容的提问来源于stack exchange,提问作者Tetsuochat
相关产品推荐
相关产品推荐

