Serializacja formy z tablicą obiektów

0

Witam. Posiadam kod:

<input type="hidden" name="FamilyMemberFormAssocciatesInputs4[FamilyMemberType][]" value="0"/>
<input type="hidden" name="FamilyMemberFormAssocciatesInputs4[Description][]" value="q"/>
<input type="hidden" name="FamilyMemberFormAssocciatesInputs4[FamilyMemberType][]" value="0"/>
<input type="hidden" name="FamilyMemberFormAssocciatesInputs4[Description][]" value="w"/>

Używam poniższej funkcji do serializacji: (Kod został ściągnięty ze stack overflow)

$.fn.serializeObject = function () {

        var self = this,
            json = {},
            push_counters = {},
            patterns = {
                "validate": /^[a-zA-Z][a-zA-Z0-9_]*(?:\[(?:\d*|[a-zA-Z0-9_]+)\])*$/,
                "key": /[a-zA-Z0-9_]+|(?=\[\])/g,
                "push": /^$/,
                "fixed": /^\d+$/,
                "named": /^[a-zA-Z0-9_]+$/
            };


        this.build = function (base, key, value) {
            base[key] = value;
            return base;
        };

        this.push_counter = function (key) {
            if (push_counters[key] === undefined) {
                push_counters[key] = 0;
            }
            return push_counters[key]++;
        };

        $.each($(this).serializeArray(), function () {

            // Skip invalid keys
            if (!patterns.validate.test(this.name)) {
                console.log("serialize failed for");
                console.log(this);
                return;
            }

            var k,
                keys = this.name.match(patterns.key),
                merge = this.value,
                reverse_key = this.name;

            while ((k = keys.pop()) !== undefined) {

                // Adjust reverse_key
                reverse_key = reverse_key.replace(new RegExp("\\[" + k + "\\]$"), '');

                // Push
                if (k.match(patterns.push)) {
                    merge = self.build([], self.push_counter(reverse_key), merge);
                }

                // Fixed
                else if (k.match(patterns.fixed)) {
                    merge = self.build([], k, merge);
                }

                // Named
                else if (k.match(patterns.named)) {
                    merge = self.build({}, k, merge);
                }
            }

            json = $.extend(true, json, merge);
        });

        return json;
    };

W wyniku otrzymuję:
screenshot-20230202150531.png

Możecie podpowiedzieć co zrobić, aby otrzymać: ?

FamilyMemberFormAssocciatesInputs4: (Array2)
 0: {
   FamilyMemberType: "0",
   Description: "q"
 },
 1: {
   FamilyMemberType: "0",
   Description: "w"
 }
0

Średnio to wygląda w obecnej formie, nie bardzo wiadomo który FamilyMemberType połączyć z Description. Jeżeli masz możliwość to opakuj inputy np w fieldset, coś takiego:

<fieldset>
    <input type="hidden" name="FamilyMemberFormAssocciatesInputs4[FamilyMemberType][]" value="0" />
    <input type="hidden" name="FamilyMemberFormAssocciatesInputs4[Description][]" value="q" />
</fieldset>
<fieldset>
    <input type="hidden" name="FamilyMemberFormAssocciatesInputs4[FamilyMemberType][]" value="0" />
    <input type="hidden" name="FamilyMemberFormAssocciatesInputs4[Description][]" value="w" />
</fieldset>

a potem zrób po prostu map po tym.

const fieldsets = [...document.querySelectorAll("fieldset")];
const regex = /[a-zA-Z0-9_]+|(?=\[\])/g;

const data = fieldsets.map((fieldset) => {
    const inputs = [...fieldset.querySelectorAll("input")];

    return inputs.map((input) => {
        const keys = input.name.match(regex);
        return {
            [keys[1]]: input.value
        }
    })
})
console.log(data)

1 użytkowników online, w tym zalogowanych: 0, gości: 1