html片段去重,单层循环能搞定么?

通常的去重是针对简单的数组,可以使用一个对象,将数组值作为对象属性,然后判断该对象的索引是否有定义。
vardistinctArr=function(arr){
vari=0,
j=arr.length,
cacheObj={},resArr=[];
for(;iif(!cacheObj[arr[i]]){
cacheObj[arr[i]]=1;
resArr.push(arr[i]);
}
}
returnresArr;
}
但是,怎么把DOM集合去重呢(把DOM集合makeArray后)。
以上的方法针对DOM集合是无效的。
去重就是基于这种情形:
div>div>span
当我想用类似$('divspan')的方式来获取span时(个人js原生实现,非jquery),我是先获取div,然后在得到的前一个结果集中寻找下一个符合条件的span,依此类推。
如此方法,我获取div,肯定得到的数组长度为2了。再寻找span时,就出问题了,按照这种方法寻找,肯定会找到两个相同的span了。
于是我就想得到所有结果后,进行一次过滤操作。
当然,还有一种方法好像在处理过程中用contains和compareDocumentPosition来判断节点关系的,这样没必要进行去重操作了。
单层循环能搞定么,两层循环判断太慢了。
开满天机
浏览 440回答 2
2回答

哆啦的时光机

用hash表
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript