Разбор файла и сохранение в функции Map с несколькими значениями в Node js - PullRequest
0 голосов
/ 06 мая 2018

Я анализирую следующий формат файла:

// URL //

счет / 42

// Статус //

200

// HEADERS //

Content-Type = применение / JSON * * 1014

// BODY //

{"name": "xyz"}

// URL //

счет / 43

Я хотел бы сохранить несколько значений для одного ключа в функции карты.

токовый выход

{ 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;    

}

Хорошо, я вижу, что проблема в объявлении "Value", так как я хочу сохранить несколько значений, и я не уверен, когда и как объявлять значение. Даже если я объявлю значение как глобальное, оно сохранит предыдущее значение. Проблема: Как сохранить несколько значений в карте?

1 Ответ

0 голосов
/ 06 мая 2018

Проблема, с которой вы столкнулись, вызвана продолжением после того, как вы уже определили, что линия является ключом.Тело продолжает выполняться после этого:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...