我在Javascript中有一个包含很多子数组的数组。计算数组保存的位数/字节数的最佳/最简单方法是什么?我要将数组发送到我的PHP服务器,它只能是5kB大。
是否有本地方法?我不是很熟悉比特。如果我理解正确1个字符适合8b / 1B(虽然它明显取决于编码)。最好的方法是循环遍历所有数组并计算字符数吗?
答案 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