Професионална програма
Loading...
igelov avatar igelov 0 Точки

JS for Front-End - March 2020 - Задача - Format the text.

Здравейте на всички!

 

Нуждая се от помощ за задача 6 (с повишена трудност) от DOM лекцията - Format the text. В Judge e тази - https://judge.softuni.bg/Contests/Practice/Index/2236#5

 

Решил съм я, получил съм 100 точки, но ми се ще някой да предложи по елегантно решение от моето.

Ето и моя код - https://pastebin.com/u2GM6dRY

 

Благодоря за съдействието!

Тагове:
-1
JavaScript for Front-End
MartinBG avatar MartinBG 2826 Точки

Ето едно решение, следващо по-актуалните течения в JS:

function solve() {
  const inputText = document.getElementById('input').innerText;
  const outputElement = document.getElementById('output');

  inputText
    .match(/(?:\s*)([^.!?]+[.!?]+)/g)
    .map(sentence => sentence.trim())
    .reduce((acc, sentence, index) => {
      if (index % 3 === 0) { acc.push([sentence]); } else { acc[acc.length - 1].push(sentence); }
      return acc;
    }, [])
    .forEach(paragraph => {
      let parHTML = document.createElement('p');
      parHTML.textContent = paragraph;
      outputElement.appendChild(parHTML);
    });
}

Не знам дали е по-елегантно от твоето, а и подобна оценка е по-скоро субективна, но имай предвид, че в JS света не гледат с добро око на използването на for цикли.

1
igelov avatar igelov 0 Точки

Благодаря за предложеното решение! Доста по-елегантно и ефикасно, спрямо моите "въртележки" с for цикли!

Възможно ли е да обясните метода .reduce? Как действа стъпка по стъпка?

Много благодаря за помощта!

Поздрави, 

Иван

1
23/04/2020 23:57:03
MartinBG avatar MartinBG 2826 Точки

Методът reduce е добре обяснен тук.

 

Конкретно за задачата:

    .reduce((acc, sentence, index) => { (1)
      if (index % 3 === 0) { acc.push([sentence]); } else { acc[acc.length - 1].push(sentence); } (2)
      return acc; (3)
    }, []) (4)
  1. acc - това е, което се връща от функцията (в слуая ще е масив от масиви с до 3 елемента всеки), sentence - текущият елелемнт от масива, който редуцираме, index - индекса на тек. елемент в масива, който се редуцира
  2. Това е основната логика: ако индекса се дели на 3 без остатък (т.е. 0, 3, 6 и т.н.), добавяме нов масив в acc с един елемент - sentence, иначе - добавяме тек. елемент към последния масив в acc
  3. Връщаме acc за използване в следващата итерация или като изход от reduce, когато сме обработили всички елементи от масива, върху който е извикан reduce метода
  4. [] е началната стойност на acc - в случая празен масив.

 

1
MariqnK1 avatar MariqnK1 55 Точки

Здравей, Марто!

 

Можеш ли да споделиш защо ползваш този регекс? В условието на задачата ни казват, за да разберем колко са изреченията просто трябва да сплитнем по точка(.), регекса не е ли излишен? Благодаря за изчерпателните отговори и помощта!

0
01/09/2020 19:18:30