Javascript Node 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"}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
2 123
2

Ответы 2

Похоже, теперь у вас есть формат массива, так что это должно работать нормально:

// 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

Спасибо за быстрый ответ! Я предполагаю, что это сработает для одной находки, но мне нужно просмотреть каждую строку в файле и посмотреть, присутствует ли строка. Если строка найдена, должна быть возвращена вся строка.

Orchids 02.04.2018 21:36

Любой из них должен работать для этого. Вы конвертируете файл в массив или оставляете его как текст? Регулярное выражение будет работать позже. Он вернет все строки с совпадением запроса.

jonode 03.04.2018 19:17

Для иллюстрации я добавил скрипт js.

jonode 03.04.2018 19:29
// 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);
}

Спасибо за быстрый ответ! Могут ли эти 2 функции (обрезка и фильтр) быть вместе как одна функция?

Orchids 02.04.2018 21:44

Другие вопросы по теме