Почему я не могу выбрать значение в объекте внутри массива, используя имя свойства, которое .getOwnPropertyNames () находит после чтения из файла csv? - PullRequest
0 голосов
/ 11 октября 2019

Проблема

У меня проблема с выбором Value в объекте, который находится внутри Array со свойствами, которые можно найти с помощью .getOwnPropertyName() и Object.keys()

Однако вместо значения я получаю undefined. С тех пор я работал над этим, но это уму непостижимо, и я хотел бы понять, почему это происходит.

Поскольку я нигде не смог найти ответ на проблему, я надеюсь, что этот вопрос также поможет всем, кто сталкивается с этой проблемой

Stack:

  • Env:Node.js, npm
  • Модули: fs, csv-parser

Описание

  • Загрузка данных из файла CSV с использованием читаемого потокас помощью csv-parser и получения массива объектов.
  • Затем я хочу выбрать значение в объекте (одна пара ключ-значение) для замены значения в другом объекте.
    • Но это на самом деле не имеет значения, поскольку проблема становится заметной сразу после присвоения этого массива имени переменной и даже внутри обещания.
  • Я пытался сохранить этот ключимя в другой переменной:
    • Использование одинарных кавычек / двойных кавычек
    • Использование литерала с одинарными кавычками ("'keyname'")
    • Использование выбора точки, выбора таблицы иничего не будет работать.
  • Затем я попытался console.log:
    • Object.keys () и my_object.getOwnPropertyNames () оба возвращают это точное имя ключа
    • регистрация my_array возвращает массив объектов
    • регистрация my_array[0] возвращает один объект
    • typeof(my_object) возвращает объект
    • typeof(my_array) возвращает объект, но console.dir(my_array) возврат Array (1000) [Object, Object, Object, ...]
    • console.dir(my_array[0]) is Object {user: "D0568824B5F1D96E"}

НО

  • my_object.hasOwnProperty(my_key) возвращает false

  • Таким образом, я в конечном итоге решил эту проблему, выбрав с помощью

my_array[0][(Object.keys(my_array[0]))[0]]
  • Но это выглядит действительно нечистым и ненужным ... Я думал, что это может быть связано с кодировкой CSV-файла, но после проверки UTF-8.

  • Я также попытался изменитьимя свойства.

  • Кроме того, точно такой же код смог создать массив с читаемыми объектами. Разница между файлами заключается в том, что у нерабочего csv есть объекты с одним свойством, а у другого - несколько объектов.
  • Может ли это быть проблемой? Данные CSV представляют собой список шестнадцатеричных идентификаторов пользователей.

Код:

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);
        });
    });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...