js 排序,去重

2022-01-20 08:38:44 字數 1124 閱讀 1024

前幾天 有乙個需求要做乙個 勾選的按鈕 ,用的前端框架時 extjs   。

需求是這樣的:選擇資料後點選勾選 會把資料 放到乙個全域性變數裡,然後點選另外乙個提交按鈕 彈出乙個視窗 載入這些已經勾選的資料,進行預覽勾選的資料和提交。

隱藏的需求之一就是預覽的時候不能看到重複的資料,或者說勾選的時候需要去重。

實現如下:

/**

* 新增勾選的records 並去重

* @param value 勾選的records

*/pushexternaltickedrecords(value: ext.data.imodel)

temp.push(...value);

temp.sort((a: ext.data.imodel, b: ext.data.imodel) => else if (aid == bid) else

});let len = temp.length;

let objid = 0;

for (let i = 0; i < len; i++)

let curid = temp[i].getdata().id;

if (i != 0)

}objid = curid;

}this.externaltickedrecords = temp;

}

注:這個方法是寫在乙個類裡的,語言tsediter支援的es6標準。

簡單解釋一下:首先根據 資料id進行sort,然後迴圈這個排序後的 array 使用 splice 和 i-- 進行高效能的去重。

注:splice 減少陣列元素會影響其length 所以 要使用 len變數。如果不使用id 作為 key就要在objid裡儲存相應的key。objid 更準確的命名應該是 priorobj。

注:如果不是用 splice 而使用delete 的話 不能做i--並且後面要去除 undefined。

補充:

var ages = [3, 10, 18, 20,2,3,10,18,18,30,20,1,2

];ages.filter((m, index) => ages.findindex(x => x == m) == index);

3,10,18,20,2,30,1

去重排序 JS 陣列去重

陣列去重算是面試題裡常見的考點了,之前在 medium 上看到一篇文章用三種方法實現陣列去重的,感覺十分簡潔。主要用到的是 set,array.filter,array.reduce。可能第一種大家都知道,方方也講過基數排序來去重,但是能用 filter,reduce 寫成這樣的真的很簡潔呀。let...

JS快速排序和去重

js的快速排序和js去重在面試的時候問的挺多的.下面是我對快速排序的理解,和快速排序,去重的 1.什麼是快速排序?第一步 快速排序就是去個中間值,把比中間值小的放在左邊設為arrleft,比中間值大的放在右邊設為arrright 第二步 對arrleft進行第一步,對arrright進行第一步.明顯...

JS陣列去重,物件去重

例項1根據indexof去重,indexof的好處就是返回的是首次出現的位置,這樣後面即使出現的值一樣,也只能返回第一次出現的索引,當然這個只適用於簡單的陣列 物件陣列去重 const objarr const obj const newobjarr for let i 0 i objarr.len...