JavaScript 忽略多维关联数组键/值 - 这里出了什么问题?

标签 javascript jquery arrays

这里有什么问题吗?

第一个示例:

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}]

关于JavaScript 忽略多维关联数组键/值 - 这里出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34617161/

相关文章:

jquery - 如何删除页面中的样式表 CSS 文件并阻止它们被加载?

javascript - 列表是否包含具有特定值的项目?

java - (Java) 使用二维数组的 Tic-Tac-Toe 游戏

javascript - 将 json 文件从 php 打印到 javascript

javascript - 单击显示确认框

javascript - Angular2 在焦点事件上添加类

javascript - 我如何计算对 DESCRIPTION 或 ACCEPTANCE CRITERIA 字段的更改次数

javascript - 相当于 jQuery 加载的原型(prototype)

javascript - 如何在 vue.js 中不使用循环方法将类型数组对象更改为格式化对象?

python - 在循环中将项目添加到数组