繁体   English   中英

Javascript如何很好地传递位数组作为url参数(角度js)

[英]Javascript How to pass an bit array nicely as url parameter (angular js)

从编码的角度来看,我正在寻找在小型JavaScript应用程序中将位数组作为url参数传递的方法,并且我希望保持参数长度尽可能小。 我有一个解决方案的想法,但是对于一个似乎对我来说很常见的问题而言,这似乎相当复杂。

上下文如下:我目前正在尝试angularjs并编写了一个简单的应用程序,有点像购物车/配置器。 我的对象数量很少(> 1024),每个对象都有少量的配置选项(少于6个)。 在典型情况下,使用该应用的人可能会选择约20个这些对象,并使用该工具进行配置。 我想将该配置设为“可收藏”。 该应用程序将此配置存储为数组。

我可以对我猜得到的数组进行json处理并将其作为url参数传递,但这将非常长。 如上所述,我需要为每个对象提供2个字节(对象ID为10位,其配置为6位)。 编写将我的配置数组转换为位数组的函数并不难。 如果我没记错的话,我会在JavaScript中将其限制为32位整数,但这也不应该太麻烦。 最终,我可以将该位数组转换为整数版本,并将其用作url参数,但这仍然是一个相当长的参数,我想是,如果我不仅要在url参数中使用数字,还可以使它更短一些,以及字母。

由于这个问题或多或少在我看来像是一个相当普遍的问题,如果您能给我一些摘要或暗示我可以解决该问题的提示,我将非常高兴。 如果有比我的想法更有效的方法来使用位数组,那也很棒。 如果应该有一个优雅的最佳实践版本,我只是想避免创建一个笨拙的解决方案。 关键是要更加熟悉javascript / angularjs。

干杯

您可以尝试将数字转换为十六进制:

> [2,10,20,30,245].map(function(x) { return (x < 16 ? "0" : "") + x.toString(16) }).join("")
"020a141ef5"

反之亦然:

> "020a141ef5".match(/../g).map(function(x) { return parseInt(x, 16) })
[2, 10, 20, 30, 245]

这不是最紧凑的编码,而是最容易实现的编码。

我有相当少量的对象,每个对象都有少量的配置选项...

对我来说,该模型太复杂了,无法将所有这些都放在URL轨道上。

我将创建一些Json对象,将其存储到具有唯一ID的cache / localStorage ,并仅传递URL ID。

在接收方,通过您与URL一起传递的ID提取所有存储的数据。

通过这种方式,t将易于维护代码并在发生故障的情况下进行调试。

当将字节表示为字母时,无论如何您可能都需要百分比编码 但是,您可以简单地使用String.fromCharCode之前:

> encodeURIComponent(String.fromCharCode.apply(String, [2, 10, 20, 30, 245]))
%02%0A%14%1E%C3%B5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM