15

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

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

4

3 回答 3

11

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

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它完成大部分工作 - 然后移除额外的数组持有者。

于 2013-10-14T06:52:01.173 回答
9

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

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

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

于 2013-10-14T06:53:11.227 回答
1

您可以使用Blob在将其转换为字符串时获取数组大小(以字节为单位)。

例子:

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

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

于 2020-03-16T10:19:46.540 回答