大型数组和 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 比较的主要内容,如果未能解决你的问题,请参考以下文章