Всем привет! Столкнулся со сложнейшей задачей, которую уже решаю 6 часов. Помогите пожалста...
Итак, у нас есть файл data.json со следующим содержимым.
[{"input":"продаю машину","output":"ban"},{"input":"продаю коня","output":"moderation"},{"input":"продаю зебру","output":"normal"},{"input":"продаю льва","output":"normal"},{"input":"продаю льва","output":"normal"},{"input":"продаю осла"}]
Нужно найти точно вхождение input и заменить в нем значение output, после чего вернуть полный массив с замененным значением и записать его в файл. И чтобы регистр не учитывался. И если будут найдены повторяющиеся input, все записывать не надо, нужно оставить только один. Например, нужно найти элемент, где input
продаю льва , и заменить output ТОЛЬКО у этого элемента на moderation.
Я сделал так, но это как то костыльно. Во первых жрет много ресурсов, во вторых как то непрофессионально. Сначала мы выбираем, что нужно найти, потом выбираем что нужно оставить, затем собираем массивы в один.
Как это сделать проще?
let data = require('./data.json');
let input = "input";
let output = "output";
let text = message.text.toLowerCase();
let new_status = 'normal';
let data_find = data.filter(f => f.input.toLowerCase() === text);
if (data_find.length !== 0) {
let new_data = data.filter(function (f) {
return f.input.toLowerCase() !== text;
});
let data_replace = data_find.map(e => e[input].toLowerCase() === text ? ((e[output] = new_status), e) : e);
// объединяем массивы и записываем
new_data = new_data.concat(data_replace[0]);
let filepatch = './detection/AutoBan/data.json';
fs.outputJson(filepatch, new_data, err => {
if (err) return console.log(err);
});
}