我在 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.
例如:看看这个嵌套数组:
var g=[1,2,3,['a','b',['-','+','&'],5],['שלום','יגבר']]
JSON.stringify(g).replace(/[\[\]\,\"]/g,'')
"123ab-+&5שלוםיגבר"
它的长度是:17(字节)
这样 - 您可以利用json.parse
它完成大部分工作 - 然后移除额外的数组持有者。
首先,您必须将数组转换为用于将数据传输到服务器的字符串表示形式。数组的大小无关紧要,因为它将是要传输的字符串。根据您序列化该数组的方式,大小差异可能非常显着。
序列化数组的可能选项是jQuery.param()
method 或JSON.stringify()
. 您还可以构建自己的方法来转换值,以便您的 PHP 代码可以理解它。
获得该字符串后,您可以stringValue.length * 8
获取大小,假设 a) 值是 ASCII 或 b) 您对所有值进行 url 编码,以便将 Unicode 字符转换为 ASCII。*8
有没有得到这些位,但既然你提到限制是 5kB - 这些很可能是字节,所以你跳过乘法。
您可以使用Blob在将其转换为字符串时获取数组大小(以字节为单位)。
例子:
const myArray = [{test: 1234, foo: false, bar: true}];
console.info(new Blob([JSON.stringify(myArray)]).size); // 38