Как исключить определенные объекты JSON при рендеринге данных - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть локальный файл JSON, содержащий объекты JSON, и я хочу, чтобы, если объект obj содержит конкретную строку, то этот объект отображается в таблице.Если нет, то он не отображается.В настоящее время я получаю одну ошибку в DevTools: Uncaught TypeError: Cannot read property 'DT_RowId' of undefined, и я работаю с DataTables - хотя это полезно, использование функций с ним было головной болью.

Фрагмент JS:

function loadPH() {
    let admissText = admissData.d.results.map(function(val) {
        if (val.p_h_v !== "") { // If this is not empty, then return
            return {
                "PHV": val.p_h_v,
                "Part C": val.partc
            }
        }
    })

    $('#prohac-table').DataTable({
        columns: [
            { data: "PHV" },
            { data: "Part C" },
            ... // ---------- the rest contains irrelevant data

Фрагмент JSON:

{
    "d": {
      "results": [
        {
         ...
         "p_h_v": "" // ------------ this doesn't meet conditions, isn't rendered
         ...
        },
        {
         "p_h_v": "Yes" // ---------- meets conditions---this obj rendered
         ...

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Преобразовал ваш пример в stack-snippet, и потребовалось только filter, значения, которые карта не возвращала, были undefined объектами в вашем наборе данных и вызывали проблему.

var admissData = {
  "d": {
    "results": [{
        "p_h_v": "Maybe", // ---------- meets conditions---this obj rendered
        "partc": "show this too"
      },
      {
        "p_h_v": "", // ------------ this doesn't meet conditions, isn't rendered
        "partc": "test - no show"
      },
      {
        "p_h_v": "Yes", // ---------- meets conditions---this obj rendered
        "partc": "test - show"
      }
    ]
  }
};

function loadProHac() {
  let admissText = admissData.d.results
    .filter(x => x.p_h_v !== "")  //added your filter here.
    .map(function(val) {
      return {
        "PHV": val.p_h_v,
        "Part C": val.partc
      }
    });

  $('#prohac-table').DataTable({
    data: admissText,
    columns: [{
        data: "PHV"
      },
      {
        data: "Part C"
      }
    ]
  });
}
loadProHac();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css" rel="stylesheet" />
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<table id='prohac-table'></table>
0 голосов
/ 20 февраля 2019

Я думаю, Array.filter() - это то, что вы ищете здесь:

const admissText = admissData.d.results.filter(result => result.p_h_v !== '');

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