计算数组的位/字节大小

时间:2013-10-14 06:47:44

标签: javascript jquery byte

我在Javascript中有一个包含很多子数组的数组。计算数组保存的位数/字节数的最佳/最简单方法是什么?我要将数组发送到我的PHP服务器,它只能是5kB大。

是否有本地方法?我不是很熟悉比特。如果我理解正确1个字符适合8b / 1B(虽然它明显取决于编码)。最好的方法是循环遍历所有数组并计算字符数吗?

3 个答案:

答案 0 :(得分:8)

首先,您必须将数组转换为用于将数据传输到服务器的字符串表示形式。数组的大小无关紧要,因为它将是要传输的字符串。根据序列化该数组的方式,大小差异可能非常大。

序列化数组的可能选项是jQuery.param()方法或JSON.stringify()。您还可以构建自己的方法来转换值,以便PHP代码可以理解它。

获得该字符串后,您可以使用stringValue.length * 8来获取大小,假设a)值为ASCII或b)您对所有值进行了url编码,以便将Unicode字符转换为ASCII。 *8可以获取这些位,但是因为你提到限制是5kB - 那些很可能是字节所以你跳过乘法。

答案 1 :(得分:4)

你可以这样做:(为了得到真正好的估计)

var g = JSON.stringify(myBigNestedarray).replace(/[\[\]\,\"]/g,''); //stringify and remove all "stringification" extra data
alert(g.length); //this will be your length.

例如:已经对这个嵌套数组执行了操作:

var g=[1,2,3,['a','b',['-','+','&'],5],['שלום','יגבר']]

JSON.stringify(g).replace(/[\[\]\,\"]/g,'')

 "123ab-+&5שלוםיגבר"

其长度为:17(字节)

这样 - 您可以使用json.parse的好处来完成大部分工作 - 然后移除额外的阵列持有者。

答案 2 :(得分:0)

Blob转换为字符串时,可以使用Azure Event Grids来获取数组大小(以字节为单位)。

示例:

const myArray = [{test: 1234, foo: false, bar: true}];

console.info(new Blob([JSON.stringify(myArray)]).size); // 38