JavaScript二维空数组追加异常及代码修正咨询
问题分析与修复方案
核心错误点
- 异步处理错误:
fetchText是异步函数,返回的是Promise对象,直接赋值给tester_array后立即访问数组属性/元素,会因为Promise未兑现而拿到无效值。 - 数组初始化冗余:
new_array = [[[]]]和temp_array = [[]]初始就包含空数组,导致最终数组里有多余的空嵌套结构。 - 分组逻辑失效:当前代码仅在
tester变化时追加temp_array,但同一个tester的项没有被持续收集,反而每次重置temp_array,无法实现同名分组。 - 循环方式不当:用
for...in遍历数组会遍历到数组的非索引属性,可能导致异常。 length使用错误:array.length是属性不是方法,不能写成length()。
修复后的完整代码
async function fetchText() { let response = await fetch('http://127.0.0.1:8080/data.txt'); let dataOut = await response.text(); // 分割数据,过滤掉开头的空字符串(如果文件以OUT_开头) let sections = dataOut.split("OUT_").filter(section => section.trim() !== ""); // 第一步:过滤符合条件的项 let filteredItems = []; for (let section of sections) { let columns = section.split("\n").filter(col => col.trim() !== ""); // 过滤空行 // 检查列长度≥9(索引从0开始,长度9对应索引0-8),且第6列(索引5)包含% if (columns.length >= 9 && columns[5].includes('%')) { filteredItems.push(columns); } } // 第二步:按第0列排序 filteredItems.sort((a, b) => a[0].localeCompare(b[0])); // 第三步:按第0列分组,生成三维数组 let groupedArray = []; let currentGroup = []; let currentTester = ""; for (let item of filteredItems) { if (item[0] !== currentTester) { // 新分组,先把上一个非空分组加入 if (currentGroup.length > 0) { groupedArray.push(currentGroup); } currentTester = item[0]; currentGroup = [item]; } else { // 同一分组,追加项 currentGroup.push(item); } } // 加入最后一个分组 if (currentGroup.length > 0) { groupedArray.push(currentGroup); } return groupedArray; } // 正确处理异步函数的返回值 fetchText().then(tester_array => { console.log(tester_array); // 示例输出:打印第一个分组的第一个项的第0列 if (tester_array.length > 0 && tester_array[0].length > 0) { document.write(tester_array[0][0][0] + "<br>"); document.write("总分组数:" + tester_array.length); } else { document.write("无符合条件的数据"); } }).catch(err => { console.error("读取文件失败:", err); document.write("读取文件失败,请检查路径或服务器状态"); });
修复说明
- 异步处理:用
.then()接收异步函数的返回值,确保拿到真实的数组后再进行操作。 - 数据清洗:分割后过滤空的section和空行,避免无效数据干扰。
- 过滤逻辑:严格按照要求过滤列长度≥9、第6列(索引5)含
%的项(若你是从0开始数第6列,可改为columns[6].includes('%'))。 - 排序与分组:先排序再分组,确保同名项被归到同一组,最终生成
[分组1, 分组2, ...],每个分组是[项1, 项2, ...],每个项是列数组,符合三维数组结构。 - 循环优化:用
for...of遍历数组,避免for...in的潜在问题。
内容的提问来源于stack exchange,提问作者Mich
相关产品推荐
相关产品推荐

