我目前正在尝试将csv字符串解析为一个对象,该对象允许我在第一个对象中找到客户名称,然后能够访问基于该名称的子数组中的客户信息。
csvString = "roll R coaster,0124454,20.21\n
我知道.split()函数将根据分隔符拆分字符串并将其放入数组中。如果我使用"\n"作为第一个分隔符,则会为每个客户创建5个数组元素,然后是他们各自的信息。
array[0] = "roll R coaster,0124454,20.21"
我目前正在尝试将csv字符串解析为一个对象,该对象允许我在第一个对象中找到客户名称,然后能够访问基于该名称的子数组中的客户信息。
csvString = "roll R coaster,0124454,20.21\n
array[0] = "roll R coaster,0124454,20.21"
我认为这段代码基本上可以满足你的需求。
csvString = "roll R coaster,0124454,20.21\n Sammy Smocks,000006,(20.20)\n maxwell BLANCO ,002125,(15),\n Will Monsters,003576,6.9,15\n Trank Burger,103529,9.56,5";
const objects = csvString.split('\n ')
.map(x => {
const [name, TransactionNumber, TrAm] = x.split(',');
TransactionAmount = TrAm[0] === '(' ? +TrAm.slice(1, -1) : +TrAm;
FullName = name
.replace(/^\s{2,}/g, ' ')
.replace(/\s{3}/g, ' ')
.replace(/\s{2}$/g, ' ');
const [FirstName, MiddleName, LastName] = FullName.split(' ');
return {
FirstName,
MiddleName,
LastName,
TransactionNumber,
TransactionAmount
}
});
console.log(objects);
所以我们将csv作为字符串输入,按'\n'分割每一行。然后使用正则表达式拆分行,您建议根据所需的对象属性,这是可预测的每行输入,因此我们将其放入json对象中并返回它。然后您可以通过myData[i]).firstName访问它。通过微小的更改,如果您想要的话,您可以为每一行赋予一个标识,例如交易编号,因此myData["000006"].lastName将返回'Smocks'。
let csvString = "roll R coaster,0124454,20.21\n Sammy Smocks,000006,(20.20)\n maxwell BLANCO ,002125,(15),\n Will Monsters,003576,6.9,15\n Trank Burger,103529,9.56,5";
let myData = [];
csvString.split('\n').forEach((row) => {
let rowData = row.match(/(\w+) *(\w*) *(\w*),(.+),(.+)/i);
myData.push({
firstname: rowData[1],
middleName: rowData[3] ? rowData[2] : "",
lastName: rowData[3] ? rowData[3] : rowData[2],
transactionNumber: rowData[4],
transactionAmount: rowData[5]
});
});
console.log(myData);
输出:
(5) [{…}, {…}, {…}, {…}, {…}]
0:{firstname: "roll", middleName: "R", lastName: "coaster", transactionNumber: "0124454", transactionAmount: "20.21"}
1:{firstname: "Sammy", middleName: "", lastName: "Smocks", transactionNumber: "000006", transactionAmount: "(20.20)"}
2:{firstname: "maxwell", middleName: "", lastName: "BLANCO", transactionNumber: "002125", transactionAmount: "(15),"}
3:{firstname: "Will", middleName: "", lastName: "Monsters", transactionNumber: "003576,6.9", transactionAmount: "15"}
4:{firstname: "Trank", middleName: "", lastName: "Burger", transactionNumber: "103529,9.56", transactionAmount: "5"}
var csv = "roll R coaster,0124454,20.21".split(",");
var keys = [["FirstName", "MiddleName", "LastName"], "TransactionNumber","TransactionAmount"]
var Obj ={}
csv.map((val, i)=>{
if(i == 0){
val.split(" ").map((v,idx)=>{
Obj[keys[0][idx]] = v.toUpperCase()
})
}else{
Obj[keys[i]] = val
}
})
console.log(Obj)