大型数组和 javascript 比较

Posted

技术标签:

【中文标题】大型数组和 javascript 比较【英文标题】:Large arrays & javascript comparison 【发布时间】:2012-04-16 22:08:11 【问题描述】:

所以我有两个非常大的多维数组(4000+)。我从服务器得到第一个数组作为响应,我必须为每个数组元素创建 dom 节点。一旦这个过程完成,我必须发送另一个请求,在那里我将获得另一个元素列表,这将是第一个列表的子集,基于第二个列表,我必须修改第一个列表中的一些元素(并将这些更改反映在DOM 也是如此)。这个过程需要很长时间才能完成,有没有办法在没有两个 for 循环的情况下完成这个?或者更快的比较?

场景

现实世界的例子如下,考虑一群人 在特定区域 (arr1)。在 DOM 中,这将表示为 CheckBox - Name 现在考虑一组被管理的人 特定疫苗(arr2),现在 arr2 有元素列表 复选框应该被选中。必须显示整个列表(arr1 的 dom 表示) 费用。

数组的类型是

[ ["index", "name", "age"],............. ["4000-index", "4000-name", "4000-age"]]

这是一个伪代码..

//First request, get the response (resp) and Create DOM elements accordingly
for(var i=0, iLen=resp.length; i<iLen; i++)

  // Checkbox and <span id='entry-"+resp[i][0]+"'>resp[i][1]</span>

// At a later stage in the code...
//Request server for the second list get the response (resp)
arr2 = resp // Second Array

// Walk through the dom, get the list of span elements and store their ids in an array arr1 
for(var i=0, iLen=arr1.length; i<iLen; i++)

  for(var j=0, jLen= arr2.length; j<jLen; j++)
  
    if(+arr2[j][0] === +arr1[i][0])
    
      //checkbox attr = 'checked'
    
  

【问题讨论】:

您是否有一些示例代码 - 可能还有示例数据提供者?会更容易帮助:-) 也许您应该重新考虑服务器发送给客户端的内容。既然 2 个列表是相关的,为什么要进行 2 个查询? @camus & santa :为了便于理解,我更新了我的问题。这两个查询是因为这些列表是在不同的数据库中维护的。因此。 您绝对应该考虑为此另辟蹊径。 +1 ,你应该做“混搭”服务器端。 【参考方案1】:

如果您将接收到的第二组数据作为具有以下结构的对象发送,您可以获得非常好的性能提升。

var subset = 
    anID:
        bcg: true,
        someOtherProp: false,
        //and so on
    

那么你只需要修改你的 DOM 元素 -

for (var id in subset)
    //do whatever needs to be done

【讨论】:

以上是关于大型数组和 javascript 比较的主要内容,如果未能解决你的问题,请参考以下文章

document和javaScript内置对象

php生成json数组然后javascript显示出来

如何使用 JavaScript 检测 Twitter Bootstrap 3 的响应断点?

JavaScriptJavaScript基础

JavaScriptJavaScript基础

使用javascript循环读取JSON数字数组[重复]