Loading...
simon.kan1 avatar simon.kan1 9 Точки

06. From JSON to HTML Table

https://pastebin.com/bi5QnuhJ

https://judge.softuni.bg/Contests/Practice/Index/2758#5

Здравейте, докарах кода до 50/100, обаче не знам как да направя функцията escapeHtml(value) , намерих тази функция: 

function escapeHtml(value) {

        return value

            .replace(/&/g, "&")

            .replace(/</g, "&lt;")

            .replace(/>/g, "&gt;")

            .replace(/"/g, "&quot;")

            .replace(/'/g, "&#039;");

    }

Но не знам как да я приложа в този случай, знам че е нещо с regex, ако може да ми покажете

Тагове:
1
JavaScript Advanced
willystyle avatar willystyle 2472 Точки
Best Answer

ето така се ползва
https://pastebin.com/9bPgVZqb
но в условието излежда има още някоя тънкост, а го няма в judge, ако можеш да го споделиш и ще го докараме до 100.

1
simon.kan1 avatar simon.kan1 9 Точки

06.From JSON to HTML Table

You’re tasked with creating an HTML table of students and their scores. You will receive a single string representing an array of objects, the table’s headings should be equal to the object’s keys, while each object’s values should be a new entry in the table. Any text values in an object should be escaped, in order to avoid introducing dangerous code into the HTML.

Input

The input comes a single string argument (the array of objects).

Output

The output should be printed on the console – for each entry row in the input print the object representing it.

Note:

Object’s keys will always be the same. Check more information for the HTML Entity here.

HTML

You are provided with an HTML file to test your table in the browser.

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>FromJSONToHTMLTable</title>
    <style>
        table,th{
            border: groove;
            border-collapse: collapse;
        }
        td{
            border: 1px solid black;
        }
        td,th{
            padding: 5px;
        }
    </style>
</head>
<body>
    <div id="wrapper">
    </div>
    <script>
        function fromJSONToHTMLTable(input){
            //Write your code here
        }
        window.onload = function(){
            let container = document.getElementById('wrapper');
            container.innerHTML = fromJSONToHTMLTable(['[{"Name":"Stamat","Price":5.5},{"Name":"Rumen","Price":6}]']);
        };
    </script>
</body>
</html>

Examples

Input

Output

'[{"Name":"Stamat",

    "Score":5.5},

   {"Name":"Rumen",

    "Score":6}]'

<table>

   <tr><th>Name</th><th>Score</th></tr>

   <tr><td>Stamat</td><td>5.5</td></tr>

   <tr><td>Rumen</td><td>6</td></tr>

</table>

'[{"Name":"Pesho",

    "Score":4,

    " Grade":8},
   {"Name":"Gosho",

    "Score":5,

    " Grade":8},

   {"Name":"Angel",

    "Score":5.50,

    " Grade":10}]'

<table>

   <tr><th>Name</th><th>Score</th><th>Grade</th></tr>

   <tr><td>Pesho</td><td>4</td><td>8</td></tr>

   <tr><td>Gosho</td><td>5</td><td>8</td></tr>

   <tr><td>Angel</td><td>5.5</td><td>10</td></tr>

</table>

1
willystyle avatar willystyle 2472 Точки

оказа се, е една нула ни чупи, незнам от къде си взел ескейп функцията, но трябва да е:

.replace(/'/g, '&#39;');

т.е. без нулата пред 39 :)

1
willystyle avatar willystyle 2472 Точки

между другото, аз дори в работни проекти на продакшън ползвам функцията от underscore за ескейп, опримизирана е:

function escapeHtml(str) {
    // html escape from Underscore.js https://coderwall.com/p/ostduq/escape-html-with-javascript
    let entityMap = {
        "&": "&amp;",
        "<": "&lt;",
        ">": "&gt;",
        '"': '&quot;',
        "'": '&#39;',
        "/": '&#x2F;'
    };
    return str.replace(/[&<>"'\/]/g, (s) => entityMap[s]);
}

 

2
simon.kan1 avatar simon.kan1 9 Точки

Махнах нулата и стана да, благодаря много! А тази от underscore функция как трябва да се приложи на тази задача, пробвах но не стана, дава ми str.replace is not a function?

1
willystyle avatar willystyle 2472 Точки

понеже не проверяваме с typeof дали типа на данните е 'string', а в данните има и number, затова може да добавиш например едно toString() predi reprlace:

return str.toString().replace(/[&<>"'\/]/g, (s) => entityMap[s]);
1
SoichiroHonda avatar SoichiroHonda 1 Точки

Благодаря за работещата ескейп фунцкия, аз бях намерил същата като на колегата с една 0 в повече, и това ми чупеше кода. Ще си я запазя за ползване в бъдеще.

1
02/09/2021 16:28:22
AtillaOmer avatar AtillaOmer 13 Точки

Точно това ми беше грешката и на мен. Благодаря!

0
VladeyMoney avatar VladeyMoney 2 Точки

willystyle,

в judge не работи с това  - "/": '&#x2F;'

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.