我想知道是否有办法将 csv 转换为适合 Tabulator 库的 JSON 格式?
这个想法是在 excel 上看到一种格式: - 左上角的第一个单元格,空 - 列 A、B、C... AA、AB... 根据最长行上的单元格数 -行号自动在每行的第一个单元格上)
我有直接用循环来做的想法,但我发现这需要很多时间。我没有看到任何其他方式。
感谢您的帮助。
检查以下功能,我希望这是您正在寻找的...
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 个字母的模数,减去一个显示下一个组合......
例子: