Я новичок в 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"}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Похоже, теперь у вас есть формат массива, так что это должно работать нормально:
// 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
Любой из них должен работать для этого. Вы конвертируете файл в массив или оставляете его как текст? Регулярное выражение будет работать позже. Он вернет все строки с совпадением запроса.
Для иллюстрации я добавил скрипт js.
// 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 функции (обрезка и фильтр) быть вместе как одна функция?
Спасибо за быстрый ответ! Я предполагаю, что это сработает для одной находки, но мне нужно просмотреть каждую строку в файле и посмотреть, присутствует ли строка. Если строка найдена, должна быть возвращена вся строка.