изменить значение имени: в объекте в массиве сериализации

0

Я делаю это:

        var a_survey = $('#survey-1 :input').serializeArray();

        $.ajax({
            url: "/save_a_survey/",
            type: "post",
            data: a_survey,
            csrfmiddlewaretoken:'{{ csrf_token }}',
        });

Что передает это:

csrfmiddlewaretoken:6rS9oNMSJIzJw6ye8nCQZPRkjNemyMOD
form-1-student:12
form-1-behavior_type:Externalizer
form-1-surveyset:13

Но я хочу изменить имена ключей:

csrfmiddlewaretoken:6rS9oNMSJIzJw6ye8nCQZPRkjNemyMOD
student:12
behavior_type:Externalizer
surveyset:13

Вероятно, это похоже на хак, но я имею дело с django formsets и пытаюсь спасти их части за раз; Который может также звучать как взломать...

До сих пор я пробовал это:

    a_survey = $('#survey-1 :input').serializeArray();
    for (var i = 1; i <= a_survey.length; i++) {
        a_survey[i]['name'] = a_survey[i]['name'].replace(/form-\d-/g, "");
    };

Но я продолжаю получать...

TypeError: Cannot read property 'name' of undefined

Спасибо за помощь

Теги:

1 ответ

2
Лучший ответ

В вашей итерации вы ошибаетесь. (Массивы JavaScript основаны на нулевом значении).

var a_survey = $('#survey-1 :input').serializeArray();
for (var i = 0; i < a_survey.length; i++) {
    a_survey[i].name = a_survey[i].name.replace(/form-\d-/g, "");
};

Изменение: В качестве альтернативы вы можете использовать $.each(), за предложение @RobG:

var a_survey = $('#survey-1 :input').serializeArray();
$.each(a_survey, function(i, item) {
    item.name = item.name.replace(/form-\d-/g, "");
});
  • 0
    +1 - возможно, forEach или $ .each можно использовать для итерации?
  • 0
    @RobG Хороший вопрос. Обновлен на $.each() !
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню