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

JS/jQuery创建对象时生成undefined值的问题排查

问题原因分析
  • 赋值时机错误:你将object[row[1]] = { namn: row[2] }逻辑写在了每次正则匹配命中的分支内,没有等整行所有匹配项都解析完成就执行赋值,此时row数组元素还没有填充完整。
  • 中间态访问不存在的数组索引:以解析#DIM 1 "test"行为例,三次正则匹配的过程如下:
    1. 第一次匹配到#DIM,push后row值为['#DIM'],此时访问row[1]、row[2]均为undefined,直接给object新增了key为undefined、namn为undefined的异常项
    2. 第二次匹配到1,push后row值为['#DIM', '1'],此时访问row[2]仍为undefined,给object的key1赋值的namn为undefined
    3. 第三次匹配到test,push后row值为['#DIM', '1', 'test'],此时赋值才正确,key1的namn会被覆盖为test
  • 最终输出中残留的undefined项,就是第一次匹配生成的异常key,后续没有被覆盖所以保留了下来。
修复方案

把赋值逻辑挪到do-while循环外部,等整行所有内容解析完成、row数组填充完整之后再执行赋值,修改后的代码如下:

jQuery(document).ready(function() {
  console.log("ok");
  var object = {};
  var text = `#DATA1 1000
#DATA2 1000
#DATA3 2000
#DIM 1 "test"
#DIM 6 "test2"`;
  var lines = text.split('\n');
  for (var line = 0; line < lines.length; line++) {
    if (lines[line].startsWith("#DIM")) {
      var myRegexp = /[^\s"]+|"([^"]*)"/gi;
      var row = [];
      do {
        var match = myRegexp.exec(lines[line]);
        if (match != null) {
          row.push(match[1] ? match[1] : match[0]);
        }
      } while (match != null);
      // 整行解析完成后再执行赋值
      object[row[1]] = {
        namn: row[2]
      };
    }
  }
  console.log(object);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:36:03