0

我想知道是否有办法将 csv 转换为适合 Tabulator 库的 JSON 格式?

这个想法是在 excel 上看到一种格式: - 左上角的第一个单元格,空 - 列 A、B、C... AA、AB... 根据最长行上的单元格数 -行号自动在每行的第一个单元格上)

我有直接用循环来做的想法,但我发现这需要很多时间。我没有看到任何其他方式。

感谢您的帮助。

4

1 回答 1

0

检查以下功能,我希望这是您正在寻找的...

let csvfile = 'title1,title2,title3,title4\n1,2,3,4\n11,22,33,44' //YOUR CSV FILE
let capLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' // ALPHABET SET
let finalJson = [];
let headers;
let line =[];

convertCSV2JSON(csvfile)

function convertCSV2JSON(csv) {
    line = csv.split("\n"); //PARSE ALL AVAILABLE LINES INTO ARRAY
    result = [];
    
    headers = line[0].split(","); //PARSE ALL AVAILABLE STRING NAMES INTO ARRAY AND KEEP ONLY THE FIRST ONE (HEADER)

  
    line.slice(1).forEach(function(item,i){ //RUN EACH ITEM EXCLUDING COLUMN NAMES
        var obj = {};

        if(line[i] === null || line[i] === undefined) {
        }else{

                var entries = line[i+1].split(","); // SEPARATE FOUND ENTRIES EXCLUDING COLUMN NAMES (i+1)

                for(var j = 0; j < entries.length; j++) { // PARSE ENTRIES 
                        obj[convert2Letters(j)] = entries[j]; // ASSIGN A LETTER AS COLUMN NAME
                }
        }
        finalJson.push(obj);
    })
    console.log(finalJson);
}

function convert2Letters(iteration) {
    let readyLetter = ''
    while (iteration >= 0) {
    
        readyLetter += capLetters[iteration % 26]
        iteration = Math.floor(iteration / 26) - 1
    }
    return readyLetter
}

模糊部分在foreach()函数中,因为您无法根据自己的喜好启动索引... slice() 成功了!

此外,convert2Letters() 函数接受一个字母数组,并在每次迭代中找到 26 个字母的模数,减去一个显示下一个组合......

例子:

  • 如果你有 30 列,它将给出 30 % 26 = 4
  • 4 对应于 capLetters[4],即 'E'
  • 计算下一个:迭代 = Math.floor(iteration / 26) - 1 这意味着每 26 个增量 (0,26,52,78...) 将给出 (-1,0,1,2...) 对应. 因此,30 列迭代的结果将是 0,对应于 capLetters[0] = 'A'
  • 结果:30 列将给出字母“EA”
于 2020-12-30T12:40:35.927 回答