2013-10-14 32 views
5

我有一个JavaScript数组有很多子数组。计算阵列有多少比特/字节的最好/最简单的方法是什么?我将把数组发送到我的PHP服务器,并且它只能是5kB大。计数位数/字节大小的数组

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

回答

7

首先,你必须将数组转换为用于将数据发送到服务器的字符串表示。数组的大小并不重要,因为它将是要传输的字符串。根据序列化该阵列的方式,尺寸差异可能非常重要。

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

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

+0

报价'jQuery.param'文档:“注意:由于没有普遍商定的PARAM字符串规范,它是不可能在跨支持这种语言的所有作品最好的方式,用这种方法来编码复杂的数据结构输入,使用JSON格式代替编码复杂数据。“ – Prinzhorn

+0

op想知道数组**拥有多少个字节**。你的解决方案不考虑代表数组''''和'''等等的额外字符......所以根据你的解决方案 - '[1]'长度为3,这是不正确的(长度为1)。 –

+0

@RoyiNamir这就是他所说的,但我不认为这是他的意思,如果他只能传输5kB到服务器,那么序列化数据的长度就会被计算,而'[1]'长度为8,因为JavaScript的存储'1'作为64位IEEE 754浮点数你看,他的问题是含糊 – Prinzhorn

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שלוםיגבר" 
:在此嵌套数组有alook

其中它的长度是:17(字节)

这样 - 你使用的json.parse该做的大部分工作的好处 - 然后删除多余的阵列灯座。