javascript - 匹配两个查询以检查数据类型

标签 javascript node.js

我有以下问题:

我自动将数据从 CSV 文件传输到 SQL 数据库。在此数据库中,并非每种数据类型都是“varchar”,但有时是“decimal”或类似的数据类型。首先,重要事项的表示(在控制台中):

新记录数组:

[ { Referenz: 'Beispieltext1',
    Client: 'Beispieltext2',
    Clienthauptgruppe: 'Beispieltext3',
    Kontrahent: 'Beispieltext4',
    Kontrahentenhauptgruppe: 'Beispieltext5',
    Bank: 'Beispieltext6',
    Back_to_Back: 'Beispieltext7',
    Int_Ext: 'Beispieltext8',
    Valuta: 'Beispieltext9',
    Geschaeftsart: 'Beispieltext10',
    Kauf_Verkauf: 'Beispieltext11',
    Wrg: 'Beispieltext12',
    Diff_In_Hauswaehrung: 'Beispieltext13,
    Hauswaehrung: 'Beispieltext14',
    Marktwert_NPV: 'Beispieltext15' },
  { Referenz: 'Beispieltext1',
    Client: 'Beispieltext2',
    Clienthauptgruppe: 'Beispieltext3',
    Kontrahent: 'Beispieltext4',
    Kontrahentenhauptgruppe: 'Beispieltext5',
    Bank: 'Beispieltext6',
    Back_to_Back: 'Beispieltext7',
    Int_Ext: 'Beispieltext8',
    Valuta: 'Beispieltext9',
    Geschaeftsart: 'Beispieltext10',
    Kauf_Verkauf: 'Beispieltext11',
    Wrg: 'Beispieltext12',
    Diff_In_Hauswaehrung: 'Beispieltext13,
    Hauswaehrung: 'Beispieltext14',
    Marktwert_NPV: 'Beispieltext15' },
  { Referenz: 'Beispieltext1',
    Client: 'Beispieltext2',
    Clienthauptgruppe: 'Beispieltext3',
    Kontrahent: 'Beispieltext4',
    Kontrahentenhauptgruppe: 'Beispieltext5',
    Bank: 'Beispieltext6',
    Back_to_Back: 'Beispieltext7',
    Int_Ext: 'Beispieltext8',
    Valuta: 'Beispieltext9',
    Geschaeftsart: 'Beispieltext10',
    Kauf_Verkauf: 'Beispieltext11',
    Wrg: 'Beispieltext12',
    Diff_In_Hauswaehrung: 'Beispieltext13,
    Hauswaehrung: 'Beispieltext14',
    Marktwert_NPV: 'Beispieltext15' }]

键Y:

[ 'Referenz',
  'Client',
  'Clienthauptgruppe',
  'Kontrahent',
  'Kontrahentenhauptgruppe',
  'Bank',
  'Back_to_Back',
  'Int_Ext',
  'Valuta',
  'Geschaeftsart',
  'Kauf_Verkauf',
  'Wrg',
  'Diff_In_Hauswaehrung',
  'Hauswaehrung',
  'Marktwert_NPV' ]

这是 DATA_TYPE:

[ { COLUMN_NAME: 'Referenz', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Client', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Clienthauptgruppe', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Kontrahent', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Kontrahentenhauptgruppe', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Bank', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Back_to_Back', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Int_Ext', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Valuta', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Geschaeftsart', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Kauf_Verkauf', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Wrg', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Diff_in_Hauswaehrung', DATA_TYPE: 'decimal' },
  { COLUMN_NAME: 'Hauswaehrung', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Marktwert_NPV', DATA_TYPE: 'decimal' } ]

这里是重要的循环

 newrecordarray.forEach(entry => {


                    if ( HERE IS THE PROBLEM! ) {

                        values = `"${entry[keysY[0]]}"`

                    } else {

                        values = `${entry[keysY[0]]}`

                    }


                    for (var i = 1; i < keysY.length; i++) {

                        if ( HERE IS THE PROBLEM! ) {

                            values += `,"${entry[keysY[i]]}"`
                        } else {

                            values += `,${entry[keysY[i]]}`
                        }

                    }

                    //console.log(values)

现在我想检查“if循环”,例如“Referenz”是否具有DATA_TYPE“varchar”,然后将值放在引号中,如果它具有例如DATA_TYPE“decimal”,则将值放入不带引号的值引号。

在 SQL 中它看起来像这样:

INSERT INTO "Tablename"(表名称...)VALUES ("Beispieltext1", "Beispieltext2","...","...",...,"...",.. .)

我不知道如何轻松解决这个问题。

致以诚挚的问候

弗雷德里克

最佳答案

你可以试试这个:

var rec = [ { Referenz: 'Beispieltext1',
    Client: 'Beispieltext2',
    Clienthauptgruppe: 'Beispieltext3',
    Kontrahent: 'Beispieltext4',
    Kontrahentenhauptgruppe: 'Beispieltext5',
    Bank: 'Beispieltext6',
    Back_to_Back: 'Beispieltext7',
    Int_Ext: 'Beispieltext8',
    Valuta: 'Beispieltext9',
    Geschaeftsart: 'Beispieltext10',
    Kauf_Verkauf: 'Beispieltext11',
    Wrg: 'Beispieltext12',
    Diff_In_Hauswaehrung: 'Beispieltext13',
    Hauswaehrung: 'Beispieltext14',
    Marktwert_NPV: 'Beispieltext15' }];

var dataSet = [ { COLUMN_NAME: 'Referenz', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Client', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Clienthauptgruppe', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Kontrahent', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Kontrahentenhauptgruppe', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Bank', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Back_to_Back', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Int_Ext', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Valuta', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Geschaeftsart', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Kauf_Verkauf', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Wrg', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Diff_in_Hauswaehrung', DATA_TYPE: 'decimal' },
  { COLUMN_NAME: 'Hauswaehrung', DATA_TYPE: 'varchar' },
  { COLUMN_NAME: 'Marktwert_NPV', DATA_TYPE: 'decimal' } ]

dataSet  = dataSet.reduce( (nObj, obj) => {
 nObj[obj.COLUMN_NAME] = obj.DATA_TYPE;
 return nObj;
},{})

var numberPattern = /\d+/g;



rec = rec.map( (obj) => {
 return Object.keys(obj).reduce( (nObj, key) => { 
   if(dataSet[key] != 'varchar')
      nObj[key] = parseFloat(obj[key].match( numberPattern ).join(''));
   else
     nObj[key] = obj[key];
   return nObj; 
 },{})
}) 

rec;

关于javascript - 匹配两个查询以检查数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57971817/

相关文章:

javascript - Node.js、多线程和 Socket.io

javascript - 计算在 ie9 中不起作用

javascript - 错误 : ENOENT: no such file or directory, 扫描目录 './commands/'

node.js - 异步添加快捷路线

javascript - MongoDB 查询仅适用于复制和粘贴

javascript - 具有放大图像功能的 jQuery 画廊

javascript - 如何在 ASP.NET Core MVC 中将 js 字符串发布到 C#

javascript - 如何使用带有此类实例的 'styled' 而不是 'makeStyles' 的 MUI v5 设置工具栏样式?

node.js - Laravel Vue 环境变量在哪里?

node.js - typescript 生成的定义文件(.d.ts)不适用于 package.json 类型