【问题标题】:Can not read properties of undefined (reading 'split')无法读取未定义的属性(读取“拆分”)
【发布时间】:2022-01-04 13:02:23
【问题描述】:

我写了一些代码来根据txt文件中的数据在js文件中创建对象数组,如下:

var num1 = ['100', '200', '500', '1000']
var num2 = ['10', '20', '30', '40', '50']

for (var i of num1) {
    for (var j of num2) {
        var source = './dat/txt/data_' + i + '_' + j + '.txt'
        var dest = './dat/js/data_' + i + '_' + j + '.js'
        var write = '[\n'
        fs.readFile(source, 'utf-8', function (err, data) {
            if (err) {
                console.log(err)
            }
            var datArray = data.split('\r\n')
            for(let k=0;k<parseInt(i);k++){
                var numbers = datArray[k].split(' ')
                write = write.concat('{\npos:\nx:',numbers[0],',\ny:',numbers[1],'\n},\nbeta:',numbers[2],'\n},')
            }
        })
        fs.writeFile(dest, write, (err) => {
            if (err) {
                console.log(err)
            } else console.log('Written successfully')
        })
    }
}

txt文件格式如下:

1 2 3
1 2 3
1 2 3
....

我想创建如下对象数组:

[
  {
    pos: {
      x: 1,
      y: 2,
    },
    beta: 3
  },
  ...
]

当我运行代码时,它有这个错误:

var numbers = datArray[k].split(' ')
TypeError: Cannot read properties of undefined (reading 'split')

我尝试记录数组 datArray,它是一个普通的字符串数组,datArray 的长度等于 i 的值。输出文件也只写一个字符'['和一个换行符。 我在这里做错了什么?

【问题讨论】:

  • 数组的索引从0开始,所以,你的索引必须小于数组的长度
  • 好吧,console.log(k, datArray, datArray[k]) 看看你想做什么......
  • 顺便说一句,即使修复了这个问题,它也不会起作用,因为您在 readFile 甚至完成之前运行 writeFile。要么使用同步变体,例如readFileSync,要么了解异步性。
  • 另外,因为您在fors 中使用var 而不是let 并且readFile 调用是异步的,所以所有fors 将在第一个文件完成之前完成甚至阅读,到那时i 将具有1000 的价值(对于所有这些)。如果您使用let(或者甚至更好,const,因为无论如何您都不会修改i),那么单独的is 将保持其价值。这可能是你的问题。 (要明白我的意思,请尝试for (var i of [1,2,3,4]) setTimeout(() =&gt; console.log(i), 100) - 打印4 4 4 4 - 与let/const 相同 - 打印1 2 3 4。)
  • 我建议您学习如何在 node.js 中使用调试器,这将更好地向您展示实际运行的顺序和时间,以及变量在每个点的值...

标签: javascript node.js arrays split


【解决方案1】:

我想解决这个问题 改变这一行:

var numbers = datArray[k].split(' ')

有了这个:

var numbers = datArray[k]?.split(' ')

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    相关资源
    最近更新 更多