向对象添加条目

时间:2015-11-03 08:49:40

标签: javascript php arrays

php脚本正在计算以下数组:

$test = Array();
$test['a'] = Array();
$test['a']['a1'] = 'a1';
$test['a']['a2'] = 'a2';
$test['b'] = Array();
$test['b']['b1'] = 'b1';
$test['b']['b2'] = 'b2';

我使用以下方法将此数组转换为JSON:

echo json_encode($test);

我正在使用Ajax调用检索此JSON,并且我使用以下方法将其转换为JavaScript数组:

test = JSON.parse(data);

我的问题是:如何在JavaScript中向此数组添加条目? 我试过了:

test['c'] = [];
test['c']['c1'] = 'c1';
test['c']['c2'] = 'c2';

但是在控制台中test['c']为空(Array[0])。

2 个答案:

答案 0 :(得分:6)

在此之后:

test = JSON.parse(data);

你不再处理JSON了; test对象

  

...我正在使用...

将其转换为JavaScript数组

您并未将其转换为JavaScript 数组,而是将其转换为JavaScript 对象。 JavaScript最接近PHP""关联数组"是一个对象,而不是一个数组。

要向对象添加属性,只需指定它们即可。在您的情况下,您尝试创建名为c的属性,该属性是具有其他属性的对象。由于我们在JavaScript中使用对象而非数组,因此您使用c而非{}创建[]。 E.g:

test['c'] = {};
test['c']['c1'] = 'c1';
test['c']['c2'] = 'c2';

或更简洁:

test.c = {};
test.c.c1 = 'c1';
test.c.c2 = 'c2';

甚至更多简明扼要:

test.c = {
    c1: 'c1',
    c2: 'c2'
};

你正在做什么工作,因为普通的JavaScript数组are really objects因此你可以为它们添加任意的非元素属性,以及在更多&#34中使用它们;正常"办法。但在正常情况下,您可以使用非数组对象。

  

但是在控制台测试[' c']为空(数组[0])

那是因为控制台向您展示了对象的类似数组的方面并忽略了非数组方面。但是test['c'] 确实拥有c1c2属性,控制台只是没有向您展示。但是,如果您有特定原因,则只对数组使用非索引属性名称。否则,再次使用非数组对象。

答案 1 :(得分:-1)

在javascript中你不能有命名索引。

来自http://www.w3schools.com/js/js_arrays.asp

  

许多编程语言都支持具有命名索引的数组。数组   命名索引称为关联数组(或哈希)。   JavaScript不支持具有命名索引的数组。在JavaScript中,   数组总是使用编号索引。如果使用命名索引,   JavaScript会将数组重新定义为标准对象。之后,   所有数组方法和属性都会产生不正确的结果。