如何将 SerializeArray 转换为具有动态道具名称 jquery 的对象

How Convert SerializeArray to Object With Dynamic Prop Name Jquery

提问人:rahman 提问时间:6/29/2023 最后编辑:Alive to die - Anantrahman 更新时间:6/30/2023 访问量:50

问:

如何将序列化数据从DOM转换为Object?

喜欢:

const data = section.serialize();

const object = {data}

我目前的解决方案是:

const array = section.find('select, textarea, input').serializeArray();

    var myObject = {};
    $.map(array, (item, index) => {
        myObject[item.name] = item.value;
    });

此代码转换为平面对象,但我对内部数组一无所知,例如:

obj = {
id: 1,
name : "ABC",
Persons:[] ???
}
jQuery 对象 序列化 SerializeArray

评论

0赞 Alive to die - Anant 6/29/2023
stackoverflow.com/questions/1184624/......
0赞 rahman 6/29/2023
@freedomn-m 否,当您使用 serializeArray 时,如果表单具有“多选输入”,它会返回同名列表,例如: {name: 'ID', value:'888'} {name: 'Persons', value: '11'} {name: 'Persons', value: '12'} {name: 'Persons', value: '13'}
1赞 Twisty 6/30/2023
欢迎来到 Stack Overflow。请提供一个最小的可重复示例
0赞 freedomn-m 6/30/2023
好的,那么,您能否提供一个示例 HTML,您想用它来生成所需的输出?参见最小可重复示例

答:

0赞 sylvain 6/30/2023 #1

要使用 jQuery 将序列化数据从 DOM 转换为对象,您可以使用 serializeArray(),然后可以使用 reduce() 将该数组转换为 JavaScript 对象:


const section = $('#yourSectionId');

const dataArray = section.find('select, textarea, input').serializeArray();

const dataObject = dataArray.reduce(function (obj, item) {
  obj[item.name] = item.value;
  return obj;
}, {});

作为替代方案,更紧凑的方式:

const section = $('#yourSectionId');

const dataObject = Object.fromEntries(section.find('select, textarea, input').serializeArray().map(({ name, value }) => [name, value]));