我需要将一个对象数组传递给php页面,作为更大数据结构的一部分。我试图在JavaScript中复制这个结构并通过json传递它。
php中的数组键已被设置为我在此过程中稍后需要的名称。
我知道JavaScript没有使用关联的数组,JavaScript中的数组本质上是对象,但文档建议我应该能够使用命名键。
如果是这种情况,我还应该能够使用不同的语法将变量用作命名键。
有人可以告诉我我做错了什么吗?
var dataTargets = [];
var obj = {
'test': 'test'
};
dataTargets["0"] = obj;
alert(JSON.stringify(dataTargets));

var dataTargets = [];
var obj = {
'test': 'test'
};
dataTargets["test"] = obj;
alert(JSON.stringify(dataTargets));
//outputs []

var dataTargets = [];
var dtname = "test";
var obj = {
'test': 'test'
};
dataTargets[dtname] = obj;
alert(JSON.stringify(dataTargets));
//outputs []

答案 0 :(得分:2)
属性 实际上正确分配给每个数组;问题是JSON.stringify
忽略了数组的所有非索引属性(将它们更像列表而不是像对象一样)。如果要在对象中使用命名键,则必须使用普通对象{}
而不是数组[]
:
var alert = console.log.bind(console) // for demo purposes
// Example 1: numeric keys
var dataTargets = {};
var obj = {'test':'test'};
dataTargets["0"] = obj;
alert(JSON.stringify(dataTargets));
// Example 2: named keys
var dataTargets = {};
var obj = {'test':'test'};
dataTargets["test"] = obj;
alert(JSON.stringify(dataTargets));
// Example 3: variable keys
var dataTargets = {};
var dtname = "test";
var obj = {'test':'test'};
dataTargets[dtname] = obj;
alert(JSON.stringify(dataTargets));
//outputs []

答案 1 :(得分:0)
你真正喜欢这个
例1:
var dataTargets = [];
var obj = {'test':'test'};
dataTargets[0] = obj;
alert(JSON.stringify(dataTargets));
// outputs [{test:test}]
你需要的是:
var dataTargets = {};
var obj = {'test':'test'};
dataTargets["test"] = obj;
alert(JSON.stringify(dataTargets));
//{"test":{{test:test}}}
因为array
需要通过索引访问。 object
可以是您需要的