JavaScriptNode js搜索和返回线路中包含一个文件中的字符串



我是JavaScript的新手,并努力提出解决方案。我有一个包含JSON格式行的文件。在以下代码中,我将JSON转换为对象并修剪了每行的空白并返回输出。

现在,我不仅需要删除白色空间,而且还需要在文件的每行中搜索一个字符串(由用户提供并传递为变量(,如果找到字符串,则应返回整个行。

我尝试了.includes(req.params.msg),但无法正确。

get(req, res) {
    let arry = [];
    const text = (fs.readFileSync('./pretty.out'));
    arry = (text.toString().split('n'));
    let wat = [];
    arry.forEach(i => {
      if (!!i.trim()) {
        wat.push(JSON.parse(i));
      }
    });
    res.json(wat);
}

文件的内容是

{"foo" : "bar","bar" : "sit"}
{"foo" : "lorem","bar" : "ipsum"}
{"foo" : "dolor","bar" : "amet"}

如果用户输入sit,则输出应该是

{"foo" : "bar","bar" : "sit"}
// using fs.readFileSync is fine, but only during process boot time
// if the data is dynamic you'll need to read it async
const data = (fs.readFileSync('./pretty.out'), 'utf8')
  .split('n')
  .filter(line => line.trim())
  .map(line => JSON.parse(line));
// input should use post requests         
post(req, res) {
    const query = req.body;
    let results = data.filter(d => d.bar === query);
    res.json(results);
}

看起来您现在以数组格式获得了它,所以这应该很好:

// To return multiple query matches:
function search(query){
    return arr.filter(function(item){
        return JSON.stringify(item).match(query) !== null;
    })
}

// To return single (first) query match:
function search(query){
    return arr.find(function(item){
        return JSON.stringify(item).match(query) !== null;
    })
}

如果您不将其转换为JSON对象的数组,则可以使用:

function search(query){
    return file.match(new RegExp("{.+"+query+".+}", "g"))
}

这是小提琴:https://jsfiddle.net/1cqacj3b/11/(修改以显示html

中的结果

相关内容

最新更新