Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我无法使用.getOwnPropertyNames()从csv文件读取后找到的属性名在数组中选择对象中的值? 问题_Javascript_Arrays_Javascript Objects - Fatal编程技术网

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])
      is
      Object{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);
        });
    });
};