Javascript 为什么我无法使用.getOwnPropertyNames()从csv文件读取后找到的属性名在数组中选择对象中的值? 问题
在Javascript 为什么我无法使用.getOwnPropertyNames()从csv文件读取后找到的属性名在数组中选择对象中的值? 问题,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,在数组中的对象中选择值时遇到问题,使用.getOwnPropertyName()和Object.keys() 但是,我收到的是未定义的,而不是值。我一直在努力解决这个问题,但这让我感到困惑,我想知道为什么会发生这种情况 由于我在任何地方都找不到这个问题的答案,我希望这个问题也能帮助其他面临这个问题的人 堆栈: Env:Node.js,npm 模块:fs,csv解析器 描述 我使用带有CSV解析器的可读流从CSV文件加载数据,并接收对象数组 然后我想选择对象中的值(单个键值对)来替换另一个对
数组中的对象中选择值时遇到问题,使用.getOwnPropertyName()
和Object.keys()
但是,我收到的是未定义的
,而不是值。我一直在努力解决这个问题,但这让我感到困惑,我想知道为什么会发生这种情况
由于我在任何地方都找不到这个问题的答案,我希望这个问题也能帮助其他面临这个问题的人
堆栈:
- Env:Node.js,
npm
- 模块:
fs
,csv解析器
描述
- 我使用带有
CSV解析器的可读流从CSV文件加载数据,并接收对象数组
- 然后我想选择对象中的值(单个键值对)来替换另一个对象中的值。
- 但这并不重要,因为在将该数组分配给变量名之后,甚至在promise内部,问题都是可以观察到的
- 我尝试将该键名存储在另一个变量中:
- 使用单引号/双引号
- 使用带单引号的文字(
“'keyname'”
)
- 使用点选择器,使用表选择器,什么都不起作用
- 然后我尝试了console.log一些:
- Object.keys()和my_Object.getOwnPropertyNames()都返回精确的keyname
- 记录
my_数组
返回对象数组
- 记录
my\u数组[0]
将返回单个对象
typeof(my_对象)
返回对象
typeof(my_数组)
返回对象,但console.dir(my_数组)
返回array(1000)[对象,对象,对象,…]
console.dir(my_array[0])
isObject{user:“D0568824B5F1D96E”}
但是
my\u object.hasOwnProperty(my\u key)
返回false
- 所以我最终通过选择
my_数组[0][(Object.keys(my_数组[0]))[0]]
- 但这看起来真的不干净而且不必要。。。我原以为它可能与csv文件编码有关,但经检查它是
UTF-8
- 我还尝试更改属性名称
- 同样,同样的代码能够创建具有可读对象的数组。这些文件之间的区别在于,非工作csv具有单个属性对象,而另一个具有多个属性对象
- 这可能是问题所在吗?csv数据是十六进制用户ID的列表
代码:
.pipe(parseCSV())
这看起来有点可疑。是否应该在.pipe
之前调用parseCSV
?是否可以添加示例对象的console.dir结果?单个对象的console.dir结果如下:对象{user:“D0568824B5F1D96E”}
我还将其添加到问题中。.pipe(parseCSV())
在我看来还可以,而且根据模块文档:你确定typeof(my_array)
返回数组吗?再次检查它,它实际上返回了对象(在问题中修复了它)。我的困惑,可能是因为console.dir(My_array)
返回array(1000)[对象,对象,对象,…]
。我刚才试着把它映射到新变量上,但新变量也有同样的问题。
const parseCSV = require('csv-parser');
const fs = require('fs');
let array = [];
const readFromCSV = async (sourceFile) => {
return new Promise(resolve => {
fs.createReadStream(sourceFile)
.pipe(parseCSV())
.on('data', row => {
array.push(row);
})
.on('end', () => {
console.log('Data ingested'); //console.log of array[0].keyname results in the issue at this point but also outside the function, after resolving the promise and assigning it to a variable name
resolve(array);
});
});
};