因此,对于所选的每个复选框,我获取相关的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);
}
当我尝试在控制台上打印数组时,这似乎正在起作用,见下文
0: Array[0]
ItemParentName: "Fruit"
ItemParentID: "7"
ItemID: "8"
ItemName: "Apple"
1: Array[0]
ItemParentName: "Fruit"
ItemParentID: "7"
ItemID: "9"
ItemName: "Orange"
但是,如果我执行 JSON.stringify(jsonOutput),我会得到空数组[[],[]]?我究竟做错了什么?另外,如何通过parentID / Name对这些数组进行分组,然后转换为JSON对象?
答案 0 :(得分:4)
您将数组视为普通对象。
虽然数组继承自对象,但它们是为数字索引的顺序数据而设计的,当您通过JSON.stringify
传递数据时,只会包含具有数值的属性。
如果要使用命名键,则使用对象({}
),而不是数组([]
)。
var data={};