无法通过JavaScript

时间:2017-03-07 02:46:03

标签: javascript arrays object key named

我需要将一个对象数组传递给php页面,作为更大数据结构的一部分。我试图在JavaScript中复制这个结构并通过json传递它。

php中的数组键已被设置为我在此过程中稍后需要的名称。

我知道JavaScript没有使用关联的数组,JavaScript中的数组本质上是对象,但文档建议我应该能够使用命名键。

如果是这种情况,我还应该能够使用不同的语法将变量用作命名键。

有人可以告诉我我做错了什么吗?

示例1:数字键(有效)



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




示例2:命名密钥(失败)



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




示例3:变量键(失败)



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




2 个答案:

答案 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可以是您需要的