Как вывести динамический массив JSON в таблицу HTML? - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть функция, которая вызывается при нажатии кнопки и добавляет к массиву order:

var order = [];

function updateCart(item) {
    var index = order.findIndex(i => i.id == item.id);
    if (index != -1) {
        order.splice(index, 1);
        order.push(item);
    } else {
        order.push(item);
    }
    $("#test").html(JSON.stringify(order));            
}

Если пользователь добавляет 2 из одного элемента и 1 из другого элемента, тогда order можетвыглядит так:

[{"id":1,"name":"Hawaiian","price":10,"qty":2},
 {"id":2,"name":"New Yorker","price":10,"qty":1}];

Я хотел бы иметь возможность циклически проходить по каждому элементу в массиве и иметь таблицу HTML, которая может отображать каждый заказ в удобном для чтения виде.Например:

<table>
    <thead>
        <tr>
            <th>Item</th>
            <th>Quantity</th>
        </tr>
    </thead>

    <tbody>
        <tr>
            <td>order[0].name</td>
            <td>order[0].qty</td>
        </tr>

        <tr>
            <td>order[1].name</td>
            <td>order[1].qty</td>
        </tr>
    </tbody>
</table>

Если я передам массив в свою таблицу, то он просто заменит всю таблицу и не передаст значения туда, где я указал.См. Мой пример ниже:

<script>
$("#test").html(JSON.stringify(order));  
</script>

<table id="myTable">
    <thead>
        <tr>
            <th>Item</th>
            <th>Quantity</th>
        </tr>
    </thead>

    <tbody>
        <script>
            for (var i = 0; i < order.length; i++) {
                document.write("<tr>");
                    document.write("<td>");
                        document.write(order[i].name);
                    document.write("</td>");
                document.write("</tr>");
            }
        </script>
        <tr>
            <td></td>
            <td></td>
        </tr>

        <tr>
            <td></td>
            <td></td>
        </tr>
    </tbody>
</table>

Мне интересно, есть ли более простой способ сделать то, что я хочу.Таблицы HTML DOM кажутся довольно неуклюжими.Спасибо

1 Ответ

2 голосов
/ 06 апреля 2019

Вы можете использовать map.

HTML:

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th>Quantity</th>
  </thead>
  <tbody id="test">

  </tbody>
</table>

JS:

const order = [
  { id: 1, name: "Hawaiian", price: 10, qty: 2 },
  { id: 2, name: "New Yorker", price: 10, qty: 1 }
];

const singleRow = ({ name, qty }) => `<tr><td>${name}</td><td>${qty}</td></tr>`;
$("#test").html(order.map(singleRow).join(''));

https://codepen.io/anon/pen/MReZdL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...