Задать вопрос
@andrewkovalev

Как обработать большой массив текста?

Есть большой массив текста (over 15к строк).
1. Вопрос: Lorem ipsum dolor sit amet:
+ Lorem ipsum dolor;
! Lorem ipsum dolor sit amet;
! Lorem ipsum dolo;
! Lorem ipsum dolor sit amet;
! Lorem ipsum dolo;

Заголовки начинаются с цифры, правильные ответы в плюса, неправильные с восклицательного знака.
Необходимо удалить из массива все неправильные ответы и строки которые не начинаются с цифры или плюса, а затем привести их к виду:
{
        value: "Вопрос",
        label: "Вопрос",
        desc: "Ответ",
},


Как реализовать на jquery?
  • Вопрос задан
  • 2419 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
Комментировать
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Если вам нужно провернуть такое на javascript на клиентской стороне, то явно что-то пошло не так...
Ответ написан
Комментировать
@IceJOKER
Web/Android developer
Пройтись по массиву в цикле и проверять
var pattern = /^\d/
  
  cycle 
  if(str.match(pattern) != null) console.log('question');
  if(str.charAt("+")) console.log('right answer');
  endcycle

дальше сами )
Ответ написан
Комментировать
isqua
@isqua
Научу HTML, CSS, JS, BEM и Git
Функция обработки примерно такая, на вход принимает массив строк:
/**
 * @param {String[]} strings Массив строк
 * @returns {Object[]} Массив вопросов-ответов
 */
function parseAnswers(strings) {
    var questions = [];
    
    /**
     * @param {Object} res Результат предыдущего выполнения функции
     * @param {String} current Текущая строка
     * @returns {Object} Объект нового или текущего вопроса
     */
    strings.reduce(function(res, current) {
        // Удаляем начальные пробелы
        current = current.replace(/^\s+/, '');
        
        // Если строка начинается с плюса, то это правильный ответ
        if (/^\+/.test(current)) {
            // Записываем в desc
            res.desc = current;
            
            // Кладём этот вопрос в массив
            questions.push(res);
            
            // Возвращаем объект для нового вопроса
            return {};
        }
        
        // Если строка начинается с цифры, то это вопрос
        if (/^\d/.test(current)) {
            // Записываем вопрос
            res.label = current;
        }
        
        // Возвращаем этот вопрос
        return res;
    }, {});
    
    return questions;
}


Чтобы это работало быстрее и не блокировало интерфейс, можно вынести это в worker.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы