因此,对于每个选中的复选框,我都会获取关联的ID,并根据其中的值推导出节点值,这很好。我面临的问题是使用所有复选框中的值创建正确的javascript对象。
这是功能
function finlizeJParams()
{
var jsonOutput=[];
var array = $("input[type='checkbox']:checked").map(function(){
var str=this.id;
var data=[];
var objID=str.substring(str.lastIndexOf("c_")+2,str.lastIndexOf("_n_"));
var objName=str.substring(str.lastIndexOf("_n_")+3,str.lastIndexOf("_p_"));
var objParentID=str.substring(str.lastIndexOf("_p_")+3,str.lastIndexOf("_pn_"));
var objParentName=str.substring(str.lastIndexOf("_pn_")+4);
data['ItemID']=objID;
data['ItemName']=objName;
data['ItemParentID']=objParentID;
data['ItemParentName']=objParentName;
jsonOutput.push(data)
return jsonOutput;
}).get()
JSON.stringify(array);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在控制台上打印数组时,这似乎正在起作用,因为我正在获取数组,请参见下文
0: Array[0]
ItemParentName: "Fruit"
ItemParentID: "7"
ItemID: "8"
ItemName: "Apple"
1: Array[0]
ItemParentName: "Fruit"
ItemParentID: "7"
ItemID: "9"
ItemName: "Orange"
Run Code Online (Sandbox Code Playgroud)
但是,如果我执行JSON.stringify(jsonOutput),则会得到空数组[[],[]]?我究竟做错了什么?另外,如何将这些数组按parentID / Name分组,然后转换为JSON对象?
您将数组视为普通对象。
虽然数组从对象继承,但它们是为数字索引的顺序数据而设计的,当您将它们传递给时,仅包含具有数值的属性JSON.stringify。
如果要使用命名键,请使用对象({}),而不是数组([])。
var data={};
Run Code Online (Sandbox Code Playgroud)