更好的做法:重置数组并重新添加所有项目或搜索数组并删除不必要的项目

时间:2018-01-25 15:21:00

标签: javascript jquery arrays json performance

我有一个容器(ul)中的HTML元素列表(li),在用户从完整列表中选择一个项目后添加。有不同的类别,每个类别都有相应的"项目"。 例如:

<!--Clicking on an item adds it to the user_selection_list below-->
 <ul class="full_list">
   <li data-category="A" data-item="1">test1</li>
   <li data-category="A" data-item="2">test2</li>
   <li data-category="A" data-item="3">test3</li>
   <li data-category="A" data-item="4">test4</li>

   <li data-category="B" data-item="1">test1</li>
   <li data-category="B" data-item="2">test2</li>

   <li data-category="C" data-item="1">test1</li>
   <li data-category="C" data-item="2">test2</li>
   <li data-category="C" data-item="3">test3</li>
   <li data-category="C" data-item="4">test4</li>
</ul>

<!--Items that were selected-->
<ul class="user_selection_list">
  <li data-category="A" data-item="1">test1</li>
  <li data-category="A" data-item="2">test2</li>
  <li data-category="A" data-item="4">test4</li>

  <li data-category="B" data-item="1">test1</li>
  <li data-category="B" data-item="2">test2</li>

  <li data-category="C" data-item="3">test3</li>
</ul>
<button type="button" onclick="execute()">exec</button>

最终我想要的是通过Javascript(或jquery)创建一个json对象数组:

let data_json = [
  {"category" : A, "items": [1,2,4]},
  {"category" : B, "items": [1,2]},
  {"category" : C, "items": [3]}
]

假设在&#34; user_selection_list&#34;中可以有大约1-100个选项,以下哪种方法可能是最有效的。列表:

方法A:

  1. 每次用户选择&#34; li&#34;从full_list中,将其添加到&#34; user_selection_list&#34; (如果它已经存在&gt;删除它)
  2. 清除data_json
  3. 循环播放&#34; user_selection_list&#34;并将每个项目添加到临时JSON结构中:

    让temp_data_json = [ {&#34;类别&#34;:&#34; A&#34;,&#34;项目&#34;:&#34; 1&#34;}, {&#34;类别&#34;:&#34; A&#34;,&#34;项目&#34;:&#34; 2&#34;}, {&#34;类别&#34;:&#34; A&#34;,&#34;项目&#34;:&#34; 4&#34;}, {&#34;类别&#34;:&#34; B&#34;,&#34;项目&#34;:&#34; 1&#34;}, {&#34;类别&#34;:&#34; B&#34;,&#34;项目&#34;:&#34; 2&#34;}, {&#34;类别&#34;:&#34; C&#34;,&#34;项目&#34;:&#34; 3&#34;}]

  4. 当用户按下EXEC按钮时,我循环遍历临时结构中的每个项目,并按类别组织以实现data_json。

  5. 我觉得通过添加每个项目而不首先将它们分类到temp_data_json中,添加它们会更快,然后我们可以在按下按钮后对它们进行分类。
    通过清除JSON数据然后重新添加,我们确保在&#34; user_selection_list&#34;中有一个完美同步的列表。和data_json

    方法B:

    1. 每次用户选择&#34; li&#34;从full_list中,将其添加到&#34; user_selection_list&#34; (如果它已存在&gt;删除它)
    2. 清除data_json
    3. 遍历&#34; user_selection_list&#34;中的每个项目并按类别立即组织以实现data_json。这将涉及检查&#34; user_selection_list&#34;中的每个项目。要查看它属于哪个类别,请将其添加到json中的相应类别。
    4. 当他们按下EXEC按钮时,数据将已经结构化
    5. 通过清除JSON数据然后重新添加,我们确保在&#34; user_selection_list&#34;中有一个完全同步的列表。和data_json

      方法C(不清楚,但搜索和删除):

      1. 每次用户选择&#34; li&#34;从full_list中,将其添加到&#34; user_selection_list&#34; (如果它已存在&gt;删除它)
      2. 同时,遍历每个项目data_json,检查项目是否存在于相应的类别中。如果该类别不存在&gt;创建它并添加项目。如果该类别确实存在且该项目不存在&gt;将项目添加到现有类别。如果既不存在&gt;创建类别&amp;这个项目。
      3. 当他们按下EXEC按钮时,数据将已经结构化
      4. 通过这种方式,我觉得我们并没有&#34;同步&#34;但保留两个列表(&#34; user_selection_list&#34;和data_json),但我不知道只是清除data_json列表并重新添加所有项目搜索data_json并在必要时添加/删除。

0 个答案:

没有答案