【问题标题】:Javascript - efficient way to store/work with my large object listJavascript - 存储/使用我的大型对象列表的有效方法
【发布时间】:2012-12-24 09:19:14
【问题描述】:

我正在创建一个在线指南。它将调查用户,并根据他们的回答,输出最适合他们需求的列表。

我即将组装大量对象和属性,但在我花太多时间之前,我想先解决一些问题:

为了让您了解我的目标,这里有一个使用交互式指南查找旅行目的地的示例:

用户的问题:

<form name="equator" action="">
<p>What side of the equator do you want to visit?</p>
<input type="radio" name="equator" value="north">North<br />
<input type="radio" name="equator" value="south">South<br />
</form>
<br />
<form name="english" action="">
<p>Does English need to be the first language?</p>
<input type="radio" name="english" value="yes">Yes<br />
<input type="radio" name="english" value="no">No<br />
</form>
<br />
<form name="beach" action="">
<p>Do you want a nearby beach?</p>
<input type="radio" name="beach" value="yes">Yes<br />
<input type="radio" name="beach" value="maybe">Maybe<br />
<input type="radio" name="beach" value="no">No<br />
</form>

以下是我打算创建对象列表的方式:

destinations = [

{
    name: "Moscow", equator: "north", english: "no", beach: "no"
},

{
    name: "Lima", equator: "south", english: "no", beach: "no"
},

{
    name: "Nantucket", equator: "north", english: "yes", beach: "yes"
},

]

在我正在处理的项目中,对象列表实际上有数百个,最多有两打属性。也就是说,这是我的担忧(如果它影响你的答案,我应该注意我的 Javascript 经验只能追溯到大约两周):

  • 考虑到对象列表的潜在大小,我上面的示例是否是一种有效的存储对象列表的方法?如果没有,你能推荐一些更好的吗?
  • 到目前为止,我使用 Javascript 的经验包括浏览“w3schools”教程和创建迷你项目以了解该语言......到目前为止,我创建的每个脚本都已即时处理。考虑到我的项目(如上所述),我是否应该担心任何性能损失?

感谢您的宝贵时间。

【问题讨论】:

  • 不应该 englishbeach 是布尔值吗?
  • 离题:请通读w3fools.com
  • 对于您提供/描述的对象类型,"hundreds" 不是任何现代设备的必然数字。在效率之前担心功能。
  • 使用 one 表单和 jQuery,您只需要一个衬垫 $('form').serializeArray() 即可获得您的结构。
  • 该死,我没有意识到 w3schools 是个笑话...下次我需要做一些研究,然后再浪费两周时间从在线资源中学习...感谢替代资源,伙计们。

标签: javascript arrays list object


【解决方案1】:

ArraysObjects 擅长存储这样的数据。在 JavaScript 中,Array 只是 Object 的一种特定类型。

您应该考虑的是如何使数据尽可能“基本”;即,如果一个答案只有两个答案,请考虑使用布尔值 truefalse。如果更多,那么下一站应该是整数01,..In some cases in JavaScript integers work more efficiently than Boolean values。我试图传达的想法是,当你真正需要一个字符串时,通常只使用一个字符串会更有效,例如取个名字。

学习 JavaScript 的最佳资源之一可能是 Codecademy,w3schools 不是一个好资源。

【讨论】:

    【解决方案2】:

    就像 Joseph Silber 在 cmets 中所说,您需要将 englishbeach 上的类型更改为布尔值,即:truefalse.

    至于存储你的对象,理论上我喜欢插件。查看www.knockoutjs.com 上的教程。首先,他们将向您展示如何使用nameequatorenglishbeach 属性创建对象。它还将向您展示您可以使用这些数据做的许多很酷的事情,这些事情将改善用户体验。

    编辑:抱歉,要直接回答您的问题,请查看 JSON。您已经走在正确的轨道上,我只是不确定您是如何生成数组的。

    【讨论】:

    • 感谢各位的快速反馈。显然,我有很多东西要学……听起来我在这里没什么好担心的,除了我自己作为菜鸟“程序员”的缺点。再次感谢!
    • 你做得很好@user1965279。我对您的帖子最大的担忧是缺少正确的用户名。
    • 刚刚将我的用户名更改为更“合适”的名称... :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 2012-04-24
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多