jQuery здание json из всех входов с картой () - PullRequest
1 голос
/ 30 марта 2020

Я пытаюсь перебрать все входные данные на странице и создать JSON для отправки через почтовый запрос в бэкэнд:

function getBody() {
         var blocks = $('.list-group-item').map(function(idx, elem) {

            var inputs = $(elem).find('.block-input').map(function (idi, input) {
               //Probably this part needs to change
               return {
                  [$(input).attr('name')]: $(input).val()
               };
            }).get();


            return {
               id: $(elem).data('id'),
               name: $(elem).data('name'),
               inputs,
            };
         }).get();

         var products_json = JSON.stringify(blocks,null,'\t');
         console.log(products_json)
};

Это работает, и это мой результат:

[
    {
        "id": 13,
        "name": "About us",
        "inputs": [
            {
                "title": "How we started"
            },
            {
                "paragraph": "We started 5 years ago in a ..."
            }
        ]
    }
]

Я хочу получить один объект для всех входов, а не объект для каждого входа, как мне вернуть пару ключ-значение для объекта с map ()? Я хочу, чтобы результат выглядел так:

[
    {
        "id": 13,
        "name": "About us",
        "inputs": {
            "title": "How we started"
            "paragraph": "We started 5 years ago in a ..."
        }
    }
]

Ответы [ 3 ]

1 голос
/ 30 марта 2020

Это можно исправить, обновив оператор возврата внутри getBody(), например:

return {
   id: $(elem).data('id'),
   name: $(elem).data('name'),
   inputs: Object.assign({}, ...inputs),
};
1 голос
/ 30 марта 2020

Не используйте map для создания inputs объекта. Используйте al oop, который добавляет элемент ключ / значение к объекту.

function getBody() {
  var blocks = $('.list-group-item').map(function(idx, elem) {
    var inputs = {};
    $(elem).find('.block-input').each(function(idi, input) {
      inputs[$(input).attr('name')] = $(input).val();
    });

    return {
      id: $(elem).data('id'),
      name: $(elem).data('name'),
      inputs,
    };
  }).get();

  var products_json = JSON.stringify(blocks, null, '\t');
  console.log(products_json)
};
0 голосов
/ 30 марта 2020

Вы можете преобразовать массив входных данных в объект, используя Array.reduce ().

const inputsObject = inputs.reduce((accumulator, currentValue) => {
const [firstKey] = Object.keys(currentValue);
    accumulator[firstKey] = currentValue[firstKey];
    return accumulator;
}, {})

Затем верните его,

return {
           id: $(elem).data('id'),
           name: $(elem).data('name'),
           inputs: inputsObject,
        };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...