【问题标题】:Javascript: store an array of integers locally so they can be accessed elsewhere?Javascript:在本地存储一个整数数组,以便可以在其他地方访问它们?
【发布时间】:2013-06-04 21:42:36
【问题描述】:

这可能是一个非常快速的答案(或一个非常愚蠢的问题),但我正在尝试存储一个整数数组,以便稍后可以在随机时间由另一个函数在本地访问它们。

到目前为止我想到的方法(以及它们的缺陷):

  • HTML5 数据属性,即data-ids="1,2,3"(不能在这些属性中轻松存储数组)
  • HTML5 localStorage(只能存储字符串,不能存储数组,需要转换)
  • 隐藏的输入,即<input type="hidden">(同样,不能存储数组,必须转换成字符串)

理想情况下,我希望能够使用 array.push(value) 等语法将值推送到这个本地存储的数组中。

有没有一种我想念的简单方法来做到这一点,或者我会求助于黑客?该数组的最终用途将与另一个整数数组进行比较,以查看是否有任何值匹配,如果匹配,则从第二个数组中删除索引(即它是一个数组过滤器)。

此数组不应存储在服务器上,因为客户端上的每个用户都不同。如果没有好的方法可以做到这一点,我可能会考虑以不同的方式实现该功能。

【问题讨论】:

  • 最后...请说实话,告诉我这是否是一种非常愚蠢的做事方式:) 我不会生气,它只会为我节省很多时间。
  • 这是范围问题。你在哪里声明数组?
  • 创建一个 javascript 数组(在公共范围内)并将数组存储在其中?
  • 我在一个通过 AJAX 提交帖子的函数中声明数组,我需要能够在一个单独的轮询函数中访问该数组,该函数每 n 秒重复一次并从服务器。 IE。我们在每次 AJAX 投票时比较这两个数组。
  • 使用单例/全局变量?

标签: javascript arrays json local-storage


【解决方案1】:

当然,你可以使用window.somevarname = [1,2,3]

或者,如果“其他地方”是指完全不同的页面加载,那么最好的办法是通过JSON.stringify() 运行它并将其放入localStorage,然后将其放入JSON.parse()

【讨论】:

  • 它不必跨页面加载保存,幸运的是,只需跨 AJAX 轮询间隔。我认为localstorage 可能是矫枉过正。存储为window 的属性听起来不错,没想到。
  • 在窗口中存储与作为全局存储有什么优点/缺点吗?我一直在读这个:stackoverflow.com/questions/4862193/javascript-global-variables
  • @wnajar 它们是相同的。全局变量是窗口的属性。
  • 刚刚实现了这个,结果完全符合预期。谢谢大家!
【解决方案2】:

只需在你的 html 头部声明一个全局变量

<script type="text/javascript">
var MyGlobalVariable = [1,2,3];
// or window.MyGlobalVariable = [1,2,3];
</script>

现在您可以在整个页面中访问它。

【讨论】:

  • 不是要避免全局变量吗?我对 PHP 很警惕,但从未在 JS 中使用过全局变量。
  • 如果您的变量名称正确且不会与其他变量发生冲突,则不必如此。例如 jQuery 将“jQuery”定义为全局变量。
  • @wnajar - 您探索的所有其他解决方案本质上也与全局变量相同,只是以不同的方式伪装。所以只需使用一个全局变量。当它正是你需要的时候,它没有任何问题。
  • 存在“不得使用全局变量”的情绪,因为它们很容易使代码难以维护。但是,有很多东西本质上是以不同方式伪装的全局变量(正如 Michael Gaery 上面所说的),例如单例。使用全局变量是可以的,只要你正确且谨慎地使用——问自己一些必要的问题:这个变量需要是全局的吗?我可以将变量作为参数传递给需要它的函数吗?有关更多指南,请参阅c2.com/cgi/wiki?GlobalVariablesAreBad
【解决方案3】:

在全局范围(或​​任何需要数组的地方)创建一个 javascript 变量,您可以通过它的名称访问它。

【讨论】:

    【解决方案4】:

    将数据存储在全局 java 脚本变量中是完全可以的,但决定因素是如何在页面之间导航。如果您打算进行整页刷新,Javascript 通常不是存储状态的好选择。但是,它适用于 Ajax UI,在加载较大页面上的子部分时保留全局变量

    【讨论】:

    • 这是一个完全的 AJAX UI,所以我不需要在页面刷新之间存储。仅在每n 秒间隔的 AJAX 轮询事件之间。
    • 好的,那么您应该可以将其存储为全局变量。使用数组也会使您的解决方案浏览器不可知
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 2012-11-01
    相关资源
    最近更新 更多