[英]How to read a text file into an array of objects in JavaScript
我很難找到解決問題的最佳方法。 我想將一個文本文件讀入一個對象數組。 數組的格式是固定的,但如果文本文件有更好的格式,那也是可能的。
我目前擁有的文本文件具有以下結構:
item_tag = milk
item_date = 2020-10-25
item_quantity = 1
*
item_tag = egg
item_date = 2020-10-04
item_quantity = 3
*
item_tag = banana
item_date = 2020-10-03
item_quantity = 2
*
item_tag = apple
item_date = 2020-10-10
item_quantity = 1
*
item_tag = yoghurt
item_date = 2020-10-31
item_quantity = 5
*
每個對象都有三個屬性,每個對象用 * 分隔。 同樣,這是一種我認為可能有用的格式,但我願意接受建議。
我想把它變成一個這樣結構的數組:
let Inventory = [
{"item_name": "milk", "item_date": "2020-10-25", "item_quantity": 1},
{"item_name": "egg", "item_date": "2020-10-04", "item_quantity": 3},
{"item_name": "banana", "item_date": "2020-10-03", "item_quantity": 2},
{"item_name": "apple", "item_date": "2020-10-10", "item_quantity": 1},
{"item_name": "yoghurt", "item_date": "2020-10-31", "item_quantity": 5}
];
我見過其他類似的問題(例如this和this ),但這些不是針對對象數組的。 這些解決方案也都使用 Node.JS,除非有必要,否則我寧願不使用 Node。 我見過這個,在沒有 Node.js 的情況下使用了另一種方法。 我能夠使用該線程中的此代碼顯示文本:
document.getElementById('inputfile').addEventListener('change', function() {
var fr = new FileReader();
fr.onload = function(){
document.getElementById('output')
.textContent=fr.result;
}
fr.readAsText(this.files[0]);
})
如果可能,我如何修改它以將文本轉換為對象數組?
謝謝你的幫助!
附帶說明一下,是否也可以將數組(現已修改)轉回文本文件?
首先使用.split("\\r\\n")
行,然后使用shift()
添加對象以彈出行,直到數組清空。 代碼片段生成以下數組:
[
{
"tag": "milk",
"date": "2020-10-25",
"quantity": "1"
},
{
"tag": "egg",
"date": "2020-10-04",
"quantity": "3"
},
{
"tag": "banana",
"date": "2020-10-03",
"quantity": "2"
},
{
"tag": "apple",
"date": "2020-10-10",
"quantity": "1"
},
{
"tag": "yoghurt",
"date": "2020-10-31",
"quantity": "5"
}
]
document.getElementById('inputfile').addEventListener('change', function() { var fr = new FileReader(); fr.onload = function(e){ var res = []; var lines = this.result.split("\\r\\n"); while(lines.length > 0){ res.push({ tag: getField(lines), date: getField(lines), quantity: getField(lines), }); if(lines[0] == '*') lines.shift(); } console.log(res); } fr.readAsText(this.files[0]); }) function getField(lines){ return lines.shift().split(' = ')[1]; }
<input id="inputfile" type="file" value="upload" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.