一个 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]
)。
最佳答案
在此之后:
test = JSON.parse(data);
您不再处理 JSON; test
是一个对象。
...and I'm turning this it into a JavaScript array using...
您不是将其转换为 JavaScript 数组,而是将其转换为 JavaScript 对象。 JavaScript 最接近 PHP 的“关联数组”的是对象,而不是数组。
要为对象添加属性,您只需分配给它们。在您的情况下,您正在尝试创建一个名为 c
的属性,该属性是一个具有其他属性的对象。由于我们在 JavaScript 中使用对象而不是数组,因此您将使用 {}
而不是 []
创建 c
。例如:
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因此您可以向它们添加任意的非元素属性,并以更“正常”的方式使用它们。但在正常情况下,您会改用非数组对象。
But then in the console test['c'] is empty (Array[0])
那是因为控制台向您展示了对象的类数组方面,而忽略了非数组方面。但是 test['c']
did 有 c1
和 c2
属性,只是控制台没有显示它们给你。尽管如此,如果您有特定原因,请仅对数组使用非索引属性名称。否则,再次使用非数组对象。
关于javascript - 向对象添加条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33494791/