簡體   English   中英

如何將文本文件讀入 JavaScript 中的對象數組

[英]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}
];

我見過其他類似的問題(例如thisthis ),但這些不是針對對象數組的。 這些解決方案也都使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM