[英]Parsing a string similar to a CSV file
有一個模仿 CSV 文件的字符串,您必須將其傳遞給一個函數並獲得一個由對象組成的數組。 怎么做? 請幫忙。
function STRtoArray (str) {
// Code here
}
var str = 'Name,Age,Car,wife \n John,25,,true\n Ben,31,wolksvagen,false'
預期結果如下:
[
{
Name: John,
Age: 25,
Car: false,
wife: true
},
{
Name: Kolya,
Age: 31,
Car: wolksvagen,
wife: false
}
]
function strToArray (str) { var lines = str.split(/\\n/); var keys = lines[0].split(','); var arr = []; for (var i = 1; i < lines.length; i++) { var line = lines[i].trim().split(','); var obj = {}; for (var j = 0; j < line.length; j++) { obj[keys[j].trim()] = (line[j].length ? (line[j] === 'true' ? true : (line[j] === 'false' ? false : (isNaN(line[j]) ? line[j] : parseInt(line[j])))) : false); } arr.push(obj); } return arr; } var str = 'Name,Age,Car,wife \\n John,25,,true\\n Ben,31,wolksvagen,false' console.log(strToArray(str));
使用String.prototype.split()
、 Array.prototype.map()
和Array.prototype.reduce()
函數的解決方案:
function STRtoArray(str) { var lines = str.split('\\n'), keys = lines[0].trim().split(','); // getting key fields var result = lines.slice(1).map(function (l){ return l.trim().split(',').reduce(function (r, l, i) { if (i === 1) l = Number(l); // casting 'Age' field to number type if (i === 3) l = Boolean(l === 'true'? 1:0); r[keys[i]] = l; return r; }, {}); }); return result; } var str = 'Name,Age,Car,wife \\n John,25,,true\\n Ben,31,wolksvagen,false' console.log(STRtoArray(str));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.