所以我有两个非常大的多维数组(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'
}
}
}
答案 0 :(得分:2)
如果您将接收的第二组数据作为具有以下结构的对象发送,则可以获得一些非常好的性能提升。
var subset = {
anID:{
bcg: true,
someOtherProp: false,
//and so on
}
}
然后你需要修改你的DOM元素 -
for (var id in subset){
//do whatever needs to be done
}