在serialize数组中的对象中更改name的值

时间:2014-04-01 01:21:52

标签: javascript jquery

我这样做:

        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 个答案:

答案 0 :(得分: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, "");
};

编辑:或者,您可以根据@ RobG的建议使用$.each()

var a_survey = $('#survey-1 :input').serializeArray();
$.each(a_survey, function(i, item) {
    item.name = item.name.replace(/form-\d-/g, "");
});