引言
今天在項目中一個功能要用到兩個數組求交集的算法。 大概是這樣: 兩個表格分別用easyui datagrid實現,要把A表格的一列數據和B表格的一列數據取出來,然后去重,去重后求交集。 那么在計算出的交集中分別根據求出的數據選中兩個表格的對應行。 故用到js數組去重和求交集。
交集
Array.prototype.intersect = function(b) { var flip = {}; var res = []; for(var i=0; i< b.length; i++) flip[b[i]] = i; for(i=0; i<this.length; i++) if(flip[this[i]] != undefined) res.push(this[i]); return res; }
去重
Array.prototype.Remove=function{ // 去重 var r = []; for(var i = 0; i < this.length; i ++) { var flag = true; var temp = this[i]; for(var j = 0; j < r.length; j ++) { if(temp === r[j]) { flag = false; break; } } if(flag) { r.push(temp); } } return r; }
總結
1、在使用的過程中去重和求交集幾乎沒什么大問題,另外一個細節問題就是我在提取datagrid的某列數據時,循環提取時,因為列內容是漢字,在循環時又必須給每列的數據加上單引號構成類似這種結構:['小明','小紅','小李'] 。不知道有沒有別的方法可以直接把某列數據(數據源是JSON對象)處理成數組。
2、類似數組的去重和交集也是前端或者js面試的經典題目,我以前面試前端就遇到類似的問題。這里求交集只列了一種算法,在查找解決方法時至少發現4-5種寫法,有時間都對比使用一下,再做個記錄。