先写一个简单的例子:用js将数组[1,1,3,2,7,3,4,9]去重?
通常做法:
var a = [1,1,3,2,7,3,4,9]; function distinctFilter(arr){ var b = []; for(var i=0; i<arr.length; i++){ var isRepeated = false; for(var j=0; j<b.length; j++){ if(arr[i] === b[j]){ isRepeated = true; break; } } if(isRepeated !== true){ b.push(arr[i]); } } return b; } distinctFilter(a);
缺点:嵌套for循环导致代码结构不清晰,而且执行效率不高
解决办法:利用hash表存储记录
function distinctFilter(arr){ var b = [], hash = {}; for(var i=0; arr[i] != null; i++){ if(!hash[arr[i]]){ b.push(arr[i]); hash[arr[i]] = true; } }
return b; }
简单了吧,只要一次循环就够了,其实就是充分利用hash表,分别存了数组元素和唯一性标识两个值。
浙公网安备 33010602011771号