如何在Javascript中将表单数组转换为JSON?(对象数组)?

如何在Javascript中将表单数组转换为JSON?(对象数组)?,javascript,jquery,html,json,forms,Javascript,Jquery,Html,Json,Forms,HTML: 输出: JSON.stringify($("#products").serializeArray(); 期望输出: 一个对象数组,类似这样的东西(只是一个视觉) 理想情况下,我正在寻找解决方案,以及学习的逻辑。您可以使用Array.prototype.map()在每个对象中添加一个键,该键对应于您要查找的值: Object[0].type -> "jackets" Object[0].name -> "test1" Object[0].color -> "red"

HTML:

输出:

JSON.stringify($("#products").serializeArray();
期望输出:

一个对象数组,类似这样的东西(只是一个视觉)


理想情况下,我正在寻找解决方案,以及学习的逻辑。

您可以使用
Array.prototype.map()
在每个对象中添加一个键,该键对应于您要查找的值:

Object[0].type -> "jackets"
Object[0].name -> "test1"
Object[0].color -> "red"
Object[0].size -> "S"
Object[1].type -> "jackets"
Object[1].name -> "test2"
Object[1].color -> "blue"
Object[1].size -> "S"

您可以使用
Array.prototype.map()
在每个对象中添加一个键,该键对应于您要查找的值:

Object[0].type -> "jackets"
Object[0].name -> "test1"
Object[0].color -> "red"
Object[0].size -> "S"
Object[1].type -> "jackets"
Object[1].name -> "test2"
Object[1].color -> "blue"
Object[1].size -> "S"

您需要确保
tbody
元素是
元素的子元素

那么,下面是您可以做的:

var arr=$(“#产品列表tr”).get().map(函数(tr){
return$('input',tr).get().reduce(函数(obj,input){
obj[input.name.replace(/\[.\]/,'')=input.value;
返回obj;
}, {});
});
log(JSON.stringify(arr,null,2))
。作为控制台包装{最大高度:100%!重要;顶部:0;}

夹克
测试1
红色
s
夹克
测试2
蓝色
s

您需要确保
tbody
元素是
元素的子元素

那么,下面是您可以做的:

var arr=$(“#产品列表tr”).get().map(函数(tr){
return$('input',tr).get().reduce(函数(obj,input){
obj[input.name.replace(/\[.\]/,'')=input.value;
返回obj;
}, {});
});
log(JSON.stringify(arr,null,2))
。作为控制台包装{最大高度:100%!重要;顶部:0;}

夹克
测试1
红色
s
夹克
测试2
蓝色
s

检查此链接检查此链接嘿
a
来自哪里?没有定义?这也是输出:
[{“name”:“type[]”,“value”:“jacks”,“jacks”:“jacks”},{“name”:“name[]”,“value”:“test1”,“test1”:“test1”},{“name”:“color[]”,“value”:“red”,“red”:“red”},{“name”},{“name”},{“name”},{“value”:“S”,“S”;“S”},{“name”:“type[]”,“,“value”;“value”;“夹克”,“jacks”;“name”;“name”;“name”;“name”;“value”:“test2”,“test2”;“{,“value”:“blue”,“blue”:“blue”},{“name”:“size[]”,“value”:“S”,“S”:“S”}]
啊,对不起!是typo@sieuPhanarris这将生成一个包含8个元素而不是2个元素的数组,8个对象中的每一个都有2个或3个属性
include.oh-我没有意识到它应该只有2个元素。将会更新。嘿,
a
从哪里来?它是未定义的?这也是输出:
[{“名称”:“类型[]”,“值”:“夹克”,“夹克”,“夹克”:“夹克”},{“名称”:“名称[]”,“值”:“测试1”,“测试1”},{“名称”:“颜色[]”,“值”:“红色”,“红色”},{“名称”:“尺寸[],”值“:”S“,”S“:”S“},{”名称“:”类型[]“,”值“:”夹套“,”夹套“},{”名称“:”名称[]“,”值“:”test2“,”test2“,”名称“:”颜色[]“,”值“:”蓝色“,”蓝色“},{”名称“:”大小[]“,”值“:”S“:”S“:”S“}]
ah抱歉!是typo@sieuPhanARRIS这将生成一个包含8个元素而不是2个元素的数组,8个对象中的每个对象都有2个或3个属性。例如,包含
{name:test1,value:test1}
。噢-我没有意识到它应该只有2个元素。将更新。
Object[0].type -> "jackets"
Object[0].name -> "test1"
Object[0].color -> "red"
Object[0].size -> "S"
Object[1].type -> "jackets"
Object[1].name -> "test2"
Object[1].color -> "blue"
Object[1].size -> "S"
var arr = [{"name":"type[]","value":"jackets"},{"name":"name[]","value":"test1"},{"name":"color[]","value":"red"},{"name":"size[]","value":"S"},{"name":"type[]","value":"jackets"},{"name":"name[]","value":"test2"},{"name":"color[]","value":"blue"},{"name":"size[]","value":"S"}];

var result = arr.map(function(elem){
  elem[elem.name.replace(/\W/g, '')] = elem.value; //adds key "type" with value "jackets"
  return elem;
});

result[0].jackets //"jackets"