Javascript忽略多维关联数组键/值-这里有什么问题

Javascript ignores multi-dimensional associative array keys/values - whats wrong here?

本文关键字:这里 问题 什么 数组 关联 Javascript      更新时间:2023-09-26

这里有什么问题?

第一个例子:

console.log(ntags);
console.log(JSON.stringify(ntags));

控制台输出(Google Chrome):

[Array[0], Array[0]]
    0: Array[0]
        length: 0
        numerical_value: null
        tag_id: "3"
    1: Array[0]
        length: 0
        numerical_value: "12"
        tag_id: "5"

[[],[]]

显然,变量"ntags"由一定数量的具有特定值的关联数组填充。然而,JSON.stringify生成一个空数组。

第二个例子-如果我试图直接用Ajax发布变量ntags,也会出现同样的问题:

$.ajax({ type:"POST", url: "/?tag_connection=update&fdata_id="+save_id, data: {cons: ntags}, success: function(result){
...
});

客户端不会向服务器端发送任何post数据(PHP中$_post为空)。

JSON串行化不会串行化Array的属性,这根本不是预期的行为-数组是按顺序排列的值列表。它的属性不会被串行化,因为这不是预期的行为。从技术上讲,您可以将其串行化,但这会破坏将数组作为数据类型的重要性。

例如,假设我们串行化数组[1,2,3,4],那么JSON中的预期输出是:

[1,2,3,4]

只是因为它是类型。如果数组像对象一样串行化,那么输出可能看起来像这样:

{0:1,1:2,2:3,4:4,length:4}

正如你所看到的,这要长得多——这意味着你需要通过网络发送更多的数据,以及用任何其他编程语言创建的自定义对象。通过这种方式,我们都同意数组。

因此,在这种情况下,您可能只想使用一个对象,它将输出期望的值。尝试串行化这个:

[{length:0,numerical_value: null, tag_id: 3}, {length: 0, numerical_value: null, tag_id:2}]