Javascript 在映射对象中添加自定义键值

Javascript 在映射对象中添加自定义键值,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

因此,我有一个以下格式的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!');
    });
现在,我创建了另一个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是的,这也非常感谢