我正在解析以下文件格式:
// URL //
帐户/ 42
//状态//
200
// // HEADERS
内容类型=应用/ JSON
// // BODY
{“name”:“xyz”}
// URL //
帐户/ 43
我想在map函数中存储单个键的多个值。
当前输出
{ url: [ undefined, 'account/42', undefined, 'account/43' ],
status: [ undefined, '200' ],
headers: [ undefined, 'content-type=application/json' ],
body: [ undefined, '{ "name": "xyz" }' ] }
预期输出
{ url: [ 'account/42', 'account/43' ],
status: [ '200' ],
headers: [ 'content-type=application/json' ],
body: [ '{ "name": "xyz" }' ] }
下面是代码
var fs = require('fs');
function parseFile(){
var content;
fs.readFile("src/main/resources/FileData1.txt", function(err, data) {
if(err) throw err;
content = data.toString().split(/(?:\r\n|\r|\n)/g).map(function(line){
return line.trim();
}).filter(Boolean)
console.log(processFile(content));
});
}
function processFile(nodes) {
var map={};
var key;
nodes.forEach(function(node) {
var value;
if(node.startsWith("//")){
key = node.substring(2, node.length-2).toLowerCase();
}
else{
value = node;
}
// map[key] = value;
if(key in map){
map[key].push(value);
}else{
map[key]= [value];
}
});
return map;
}
好的,我可以看到问题是声明“价值”,因为我想存储多个价值,我不确定何时&如何声明值。即使我将值声明为全局值,它也会存储前一个值。 问题:如何在地图中存储多个值?
答案 0 :(得分:0)
您遇到的问题是由于您已确定线路是关键后继续。在此之后身体继续执行:
if(node.startsWith("//")){
key = node.substring(2, node.length-2).toLowerCase();
}
并最终点击您指定值的部分。但是由于此行是key
,因此未定义值。一个简单的解决方法是在设置密钥后返回:
if(node.startsWith("//")){
key = node.substring(2, node.length-2).toLowerCase();
return; // continue to the next line
}
工作示例:
// data after parsing text
let data = [ '//URL//','account/42','//Status//','200','//HEADERS//','content-type=application/json','//BODY//','{ "name": "xyz" }','//URL//','account/43' ]
function processFile(nodes) {
var map = {};
var key;
nodes.forEach(function(node) {
var value;
if (node.startsWith("//")) {
key = node.substring(2, node.length - 2).toLowerCase();
return
} else {
value = node;
}
// map[key] = value;
if (key in map) {
map[key].push(value);
} else {
map[key] = [value];
}
});
return map;
}
let m = processFile(data)
console.log(m)