代码之家  ›  专栏  ›  技术社区  ›  Augie Li

如何将字符串解析为非类型

  •  0
  • Augie Li  · 技术社区  · 7 年前

    我正在分析csv文件:

        let lines = csvData.split(/\r\n|\n/);
        let headers = lines[0].split(',');
        for (let i = 1; i < lines.length; i++) {
          let values = lines[i].split(',');
          let item = {};
          for (let j = 0; j < headers.length; j++) {
            item[headers[j]] = values[j];
          }
          items.push(item);
        }
        return items;
    

    但是,每次我将值传递给JSON时,它们都是字符串,例如“1234”,而不是1234。通常我可以将JSON数据传递给类而不使用任何类型,但是这次我将csvData转换为JSON,JSON数据都是字符串。我猜是因为split函数使它成为一个字符串?

    可选: readCsvFile<T>(csvData) ,我可以这样做吗:

        if (typeof(T[headers[j]]) == 'number') {
          item[headers[j]] = parseFloat(values[j]);
        } else {
          item[headers[j]] = values[j];
        }
    

    但是T[header[j]]没有通过编译。

    3 回复  |  直到 7 年前
        1
  •  1
  •   Daniel Gale    7 年前

    我会做一些更实用的事情。

    //Define variables
    var csvData = "field1a,field2a,field3a\r\nfield1b,field2b,field3b";
    var linesAsObjects = [];
    var lines = csvData.split(/\r\n|\n/);
    
    //Split fields here
    var splitFields = function(line){
      let fields = line.split(',');
      addItem(fields);
    }
    
    // Assign field values to object or formatting here
    var addItem = function(fields){
      let obj = {};
      obj.field1 = fields[0];
      obj.field2 = fields[1];
      obj.field3 = fields[2];
    
      linesAsObjects.push(obj);
    }
    
    // Call the code for each line
    lines.forEach(splitFields);
    
    //Printing lines and fields as assigned to an object.
    console.log(linesAsObjects);
    
        2
  •  1
  •   Lukasz Wojciak    7 年前

    https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-0.html

    这比“any”好得多,您可以在需要的时候键入数据。

        3
  •  0
  •   hamilton.lima    7 年前

    尝试对属性使用any类型。

    // add the fields you have from the CSV
    class ResultFromCSV {
      myValue: any;
      otherValue: any;
    }
    
    ...
    let lines = csvData.split(/\r\n|\n/);
        let headers = lines[0].split(',');
        for (let i = 1; i < lines.length; i++) {
          let values = lines[i].split(',');
    
          // instantiate here
          let item = new ResultFromCSV();
          for (let j = 0; j < headers.length; j++) {
            item[headers[j]] = values[j];
          }
          items.push(item);
        }
        return items;