我在Javascript中有一个包含许多子数组的数组。如何最好/最简单地计算数组所占用的位数/字节数?我将发送该数组到我的PHP服务器,它只能达到5kB。
是否有本地方法可以实现此功能?我不太熟悉位。如果我理解正确,1个字符适合8b / 1B(尽管这显然取决于编码)。最好的方法是循环遍历所有数组并计算字符数吗?
我在Javascript中有一个包含许多子数组的数组。如何最好/最简单地计算数组所占用的位数/字节数?我将发送该数组到我的PHP服务器,它只能达到5kB。
是否有本地方法可以实现此功能?我不太熟悉位。如果我理解正确,1个字符适合8b / 1B(尽管这显然取决于编码)。最好的方法是循环遍历所有数组并计算字符数吗?
你可以这样做:(为了获得真正好的估计)
var g = JSON.stringify(myBigNestedarray).replace(/[\[\]\,\"]/g,''); //stringify and remove all "stringification" extra data
alert(g.length); //this will be your length.
例如:看这个嵌套数组: "123ab-+&5שלוםיגבר"
它的长度为:17(字节)
这种方式-您可以利用json.parse
的好处,它会完成大部分工作,然后再删除额外的数组保持者。
首先,您需要将数组转换为用于向服务器传输数据的字符串表示形式。数组的大小并不重要,因为将传输该字符串。取决于您如何序列化该数组,大小差异可能非常显着。
可能的选项是使用jQuery.param()
方法或JSON.stringify()
。您还可以构建自己的方法来转换值,以便您的PHP代码可以理解它。
在获取该字符串后,您需要使用stringValue.length * 8
来获得大小,假设a) 值是ASCII或b) 您对所有值进行了URL编码,以便Unicode字符转换成ASCII码。*8
在这里是为了获取位数,但由于您提到限制是5kB,因此这些最有可能是字节,因此您可以跳过乘法。
jQuery.param
文档: "注意: 由于没有普遍认可的 param 字符串规范,因此不可能使用此方法以一种在支持此类输入的所有语言中都能理想地工作的方式对复杂数据结构进行编码。请改用 JSON 格式作为编码复杂数据的替代方法。" - Prinzhorn[]
和"
等的额外字符...因此根据您的解决方案,[1]
的长度为3,这是不正确的(它的长度为1)。 - Royi Namir[1]
的长度为8,因为JavaScript将 1
存储为64位IEEE 754浮点数。你看,他的问题是含糊不清的。 - Prinzhorn示例:
const myArray = [{test: 1234, foo: false, bar: true}];
console.info(new Blob([JSON.stringify(myArray)]).size); // 38