所以,我有一个如下格式的csv
| index | origin | Limit | Date
1 'XYZ' 500 01/05/2020
2 'BBC' 254 01/07/2020
因此,我使用csvtojson库解析csv,并将其写入另一个json文件
csvtojson()
.fromFile('Data.csv')
.then((json) => {
const newArrayOfObj = json.map((item) => {
let month = item['Date'].split('/')[1];
return {
indessx: item['?Index'],
type: item['origin'],
number: item['limit'],
month: convertNumberToMonth(month),
date: item['Date'],
};
});
fs.writeFileSync(
'output.json',
JSON.stringify(newArrayOfObj),
'utf-8',
(err) => {
if (err) return err;
}
);
console.log('Data successfully loaded!');
});
现在,我创建了另一个助手函数,它只会将月份(数字(转换为实际的月份名称,下面是助手函数。
let monthNames = [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec',
];
const convertNumberToMonth = (number) => {
if (number === undefined) return;
return monthNames[number];
};
module.exports = convertNumberToMonth;
因此,问题是我无法使用json文件中的helper函数转换月份,它未定义。
这就是我得到的对象数组格式。
[{
indessx: '100',
type: 'E',
number: '765',
month: undefined,
date: '08/08/20' }]
在纯字符串对象上运行string.split()
时,它会返回一个字符串:
> let item = {'Date': '01/05/2020'};
undefined
> let month = item['Date'].split('/');
undefined
> month;
[ '01', '05', '2020' ]
> month[1];
'05'
然后它将是monthNames['05']
,使用字符串'05'
作为获取值的关键字。但是monthNames
既不是对象也不是Map,所以它返回undefined
。
您需要将数字转换为Number
对象。您可以在函数中执行此操作(注意,如果参数不是数字,它将给出NaN
(,也可以在将number
参数传递到函数之前执行此操作。
无论如何,添加Number(number)
,或者只添加+number
,如下所示:
> let monthNames = [
... 'Jan',
... 'Feb',
... 'Mar',
... 'Apr',
... 'May',
... 'Jun',
... 'Jul',
... 'Aug',
... 'Sep',
... 'Oct',
... 'Nov',
... 'Dec',
... ];
undefined
> const convertNumberToMonth = (number) => {
... if (number === undefined) return;
... return monthNames[+number - 1];
... }; undefined > let item = {'Date': '01/05/2020'};
undefined
> let month = item['Date'].split('/');
undefined
> convertNumberToMonth(month[1]);
'May'
>
在convertNumberToMonth
函数中,number
是一个字符串,例如"08"。
因此,当您试图访问数组monthNames
的索引"08"(即monthNames['08']
(时,您会得到一个未定义的值,因为它不存在。
您可以尝试将number
解析为整数,这应该可以解决您的问题,
const convertNumberToMonth = (number) => {
if (number === undefined) return;
return monthNames[parseInt(number)]; // Convert to int
};