大阵列& javascript比较

时间:2012-04-03 09:02:21

标签: javascript arrays

所以我有两个非常大的多维数组(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'
    }
  }
}

1 个答案:

答案 0 :(得分:2)

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

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

然后你需要修改你的DOM元素 -

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