<template>
<form enctype="multipart/form-data">
<input type="file" @change="onFileChange">
</form>
</template>
<script>
data() {
return {
fileinput: ''
}
}
methods: {
onFileChange: function(e) {
var files = e.target.files || e.dataTransfer.files;
if (!files.length) return;
this.createInput(files[0]);
},
createInput(file) {
var reader = new FileReader();
var vm = this;
reader.onload = e => {
vm.fileinput = reader.result;
};
reader.readAsText(file);
},
watch: {
fileinput: {
handler: function(val) {
let csv_result = val;
let split = csv_result.split(',');
let name = split[0];
let email = split[1];
console.log(name);
console.log(email);
}
}
}
}
</script>
我有一个将csv文件放入其中的函数。 csv文件有两列,名称和电子邮件; 然后,该函数返回结果,该结果是姓名和电子邮件的列表,如下所示:
Name,Email
fooname foosurname,fooemail@gmail.com
fooname1 foosurname1,fooemail1@gmail.com
fooname2 foosurname2,fooemail2@gmail.com
手表上的日志返回:
Name
Email
fooname foosurname
我想要实现的是拥有一个对象数组,该对象的每一行将具有全名和电子邮件。
[
{ name: "fooname foosurname", email: "fooemail@gmail.com" },
...
]
我该如何实现?
答案 0 :(得分:1)
尝试
csv.split(/\r?\n/).map(x=>x.split(/,/)).map(x=>({name:x[0],email:x[1]}) )
let csv=`Name,Email
fooname foosurname,fooemail@gmail.com
fooname1 foosurname1,fooemail1@gmail.com
fooname2 foosurname2,fooemail2@gmail.com`
let r= csv.split(/\r?\n/).map(x=>x.split(/,/)).map(x=>({name:x[0],email:x[1]}) );
r.shift(); // remove header (first item)
console.log(r);