数组看起来像这样:
["1", "2", R: "aviv", remove: function] 0: "1" 1: "2" R: "Test" length: 2 __proto__: Array[0]
When I Use JSON.stringify() for this array i get:
["1","2"]
这是因为数组长度为2,请问如何解决? 我需要使用这个数组将 ajax post 放入 php 脚本中,并且我丢失了一些 nesesarry 数据。
谢谢你, 阿维夫p>
最佳答案
["1", "2", R: "aviv", remove: function]
不代表数组 - 它是无效语法。
无论如何,假设代码旨在将创建的数组描绘为:
arr = ["1", "2"]
arr.R = "aviv"
arr.remove = function () {}
然后都 R
或remove
属性将使用 JSON.stringify 进行序列化,因为它将数组映射到 JSON 数组。
虽然 [JavaScript] 数组是对象的特化 - 特别是它们支持“expando 属性”,但 JSON 数组和 JSON 对象是不同的数据类型。
因此,JSON 数组无法映射键,并且不会映射其他属性:实际实现将迭代数组索引 [0,arr.length)
因为它将数组映射到 JSON 数组。
要将额外的键映射为 JSON 对象,请从将映射到 JSON 对象的 [JavaScript] 对象(而不是数组)开始:
notArray = { 0: "1", 1: "2", R: "aviv", remove: function () {} }
当然,也许 JSON 应该有更深层次的结构:记住上面的映射规则。
以下是两种情况的示例输出(请注意 function
未映射):
JSON.stringify(arr) // -> ["1","2"]
JSON.stringify(notArray) // -> {"0":"1","1":"2","R":"aviv"}
关于javascript - JSON stringify 忽略数组中的某些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20528458/