Javascript 在映射对象中添加自定义键值
因此,我有一个以下格式的csvJavascript 在映射对象中添加自定义键值,javascript,node.js,json,Javascript,Node.js,Json,因此,我有一个以下格式的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 newArr
| 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!');
});
现在,我创建了另一个helper函数,它将把月份(数字)转换为实际的月份名称,下面是helper函数
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;
所以,问题是我无法使用helper函数转换月份,它在json文件中没有定义
这是我得到的,以对象数组格式
[{
indessx: '100',
type: 'E',
number: '765',
month: undefined,
date: '08/08/20' }]
在
convertNumberToMonth
函数中,number
是一个字符串,如“08”
因此,当您试图访问数组monthNames
的索引'08'时,即monthNames['08']
您得到了一个未定义的值,因为它不存在
您可以尝试将number
解析为整数,这应该可以解决您的问题
const convertNumberToMonth=(数字)=>{
if(number==未定义)返回;
返回monthNames[parseInt(number)];//转换为int
};
在普通字符串对象上运行string.split()
时,它返回一个字符串:
>让项目={'Date':'01/05/2020'};
未定义
>月份=项目['Date']。拆分('/');
未定义
>月份;
[ '01', '05', '2020' ]
>月[1];
'05'
然后它将是monthNames['05']
,使用字符串'05'
作为获取值的键。但是monthNames
既不是对象也不是映射,因此它返回undefined
您需要将数字转换为number
对象。您可以在函数中执行此操作(小心,如果参数不是数字,它将给出NaN
),或者在将number
参数传递到函数之前执行此操作
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;
无论如何,添加Number(Number)
,或者只添加+Number
,如下所示:
>让monthNames=[
…“一月”,
…二月,
…“三月”,
…“四月”,
…“五月”,
……六月,
…七月,
…八月,
…“九月”,
…十月,
…11月,
…十二月,
... ];
未定义
>const convertNumberToMonth=(数字)=>{
…如果(数字===未定义)返回;
…返回月份名称[+编号-1];
... }; 未定义>let item={'Date':'01/05/2020'};
未定义
>月份=项目['Date']。拆分('/');
未定义
>ConvertNumber月(月[1]);
“五月”
>
将月份
转换为一个数字,然后再将其传递到函数中:数字(月份)
您可能还需要将数字
偏移1才能获得有效的结果,因为数组从0开始:月份[number-1]
@NickParsons是的,这也非常感谢