преобразование типа данных через запятую в json действительный источник - PullRequest
0 голосов
/ 21 марта 2020

У меня есть атрибут data:

data-columns = "title,dateaquired,genre,num_discs, etc etc - it can be any number of fields 

Попытка преобразовать json в это

[
            { data: "title" },
            { data: "dateacquired" },
            { data: "genre" },
            { data: "num_discs" },
            { data: "esrb_rating" },
            { data: "publisher" },
            { data: "platform" },
            { data: "seriesname" },
            { data: "delete" }
        ]

, а также попытка сделать это так: в приведенных выше данных значение static находится в нижней части, пытаясь использовать column для него.

data: {
                title: $("#title").val(),
                dateacquired: $("#dateacquired").val(),
                genre: $("#genre").val(),
                num_discs: $("#num_discs").val(),
                esrb_rating: $("#esrb_rating").val(),
                publisher: $("#publisher").val(),
                platform: $("#platform").val(),
                seriesname: $("#seriesname").val()
            }

Ответы [ 3 ]

0 голосов
/ 21 марта 2020

Я предполагаю, что вы хотите получить этот вывод

data: {
            title: $("#title").val(),
            dateacquired: $("#dateacquired").val(),
            genre: $("#genre").val(),
            num_discs: $("#num_discs").val(),
            esrb_rating: $("#esrb_rating").val(),
            publisher: $("#publisher").val(),
            platform: $("#platform").val(),
            seriesname: $("#seriesname").val()
        }

из столбцов данных. Предполагая, что вы получили столбцы данных и присвоили их

let datacolumns=$(#myid).attr('data-columns')

Проверьте следующий фрагмент кода

let datacolumns="title,dateacquired,genre,num_discs,esrb_rating, publisher,platform,seriesname,delete";
 let data={};
 let arr=[];
 datacolumns.split(",").forEach((element)=>{
    //using trim in case there is space
    arr.push({
    data:element.trim()
    })
    data[element]=`$(#).val()`;//for displaying purpose
   //uncomment below line to work
   //data[element]=$(`#${element.trim(0}`).val()`
 })

 console.log(data);
 console.log(arr);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 22 марта 2020

Использование данных- * Атрибуты

  1. Разделение строки атрибута
  2. Перебор атрибутов и поиск значения элемента HTML
  3. Назначение значений для объекта

В этом случае шаги 2 и 3 обрабатываются с помощью функции reduce ниже:

let data = target.dataset.columns.split(',').reduce((obj, key)=>{
  let el = document.querySelector('#'+key)
  obj.data[key] = el && el.value  || ''
  return obj;
}, { data: {} });

console.log(data)
<div id="target" data-columns="title,dateacquired,genre,num_discs"></div>

<input type="hidden" id="title" value="Top Gun" />
<input type="hidden" id="dateacquired" value="1989" />
<input type="hidden" id="genre" value="Homoerotic Dramatic Comedy" />
<input type="hidden" id="num_discs" value="1" />

Или

let arr = target.dataset.columns.split(',').map(key=>({ data: key }));

console.log(arr)
<div id="target" data-columns="title,dateacquired,genre,num_discs"></div>
0 голосов
/ 21 марта 2020

Предположим, у вас есть следующее значение в data-attriubte. Сначала вам нужно получить его по id, а затем добавить метод split, чтобы разделить строку запятыми. и затем вы можете использовать их для создания формата объекта.

<p  id="myid" data-columns = "title,dateaquired,genre,num_discs, etc etc - it can be any number of fields"></p>

let commaSplited = $(#myid).attr('data-columns').split(',');

Теперь вы можете создать объект желаемой структуры следующим образом. Индексы будут зависеть от расположения значений через запятую.

let obj = [
      data: {
         title: commaSplited [0],
         dateacquired: commaSplited[1] ,
         genre: commaSplited[2],
         num_discs: commaSplited[3],
         esrb_rating: commaSplited[4],
         publisher: commaSplited[5],
         platform: commaSplited[6],
         seriesname: commaSplited[7]
      }
];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...