无法通过 JavaScript 中的命名键访问数组

Can't access array by named key in JavaScript

我需要将对象数组作为更大数据结构的一部分传递到 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 []

属性实际上被正确分配给每个数组;问题是 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:

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可以是你所需要的