为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 JavaScript 中将文本文件读入对象数组

如何在 JavaScript 中将文本文件读入对象数组

UYOU 2023-04-14 17:33:03
我无法找到解决问题的最佳方法。我想将一个文本文件读入一个对象数组。数组的格式是固定的,但如果文本文件有更好的格式,那是可能的。我目前拥有的文本文件具有以下结构:item_tag = milkitem_date = 2020-10-25item_quantity = 1*item_tag = eggitem_date = 2020-10-04item_quantity = 3*item_tag = bananaitem_date = 2020-10-03item_quantity = 2*item_tag = appleitem_date = 2020-10-10item_quantity = 1*item_tag = yoghurtitem_date = 2020-10-31item_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]); }) 如果可能,我如何修改它以将文本转换为对象数组?谢谢你的帮助!另外,是否也可以将数组(现已修改)转回文本文件?
查看完整描述

1 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

从分割线开始.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" />


查看完整回答
反对 回复 2023-04-14
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信