⑴ js數組如何去重
方法一:indexOf循環去重
方法二:ES6 Set去重;Array.from(new Set(array))
方法三:Object 鍵值對去重;把數組的值存成 Object 的 key 值,比如 Object[value1] = true,再判斷另一個值的時候,如果 Object[value2]存在的話,就說明該值是重復的。
⑵ 數組去重的幾種方法
js jquery去除數組中的重復元素
第一種:$.unique()
第二種:
for(var i = 0,len = totalArray_line.length;i < len;i++)
{
!RegExp(totalArray_line[i],"g").test(resultArray_line.join(",")) && (resultArray_line.push(totalArray_line[i]));
}
⑶ python 列表去重(數組)的幾種方法
function clear(arr) {// 1 如何獲取數組中每一個元素出現的次數var o = {}; // 1.1 記錄數組中元素出現的次數for (var i = 0; i < arr.length; i++) {var item = arr[i]; // 數組中的每一個元素// o[item] = 1;// 1.2 判斷o對象是否有當前遍歷到的屬性if (o[item]) {// 如果o[item] 存在,說明次數不為1o[item]++;} else {// 如果o[item] 不存在,說明是第一次出現o[item] = 1;}}// console.log(o); // 2 生成一個新的數組,存儲不重復的元素var newArray = [];// 2.1 遍歷對象o中的所有屬性for (var key in o) {// 2.2 判斷o對象中當前屬性的值是否為 1 如果為1 說明不重復直接放到新數組中if (o[key] === 1) {newArray.push(key);} else {// o對象中當前屬性 次數不為1 ,說明有重復的,如果有重復的話,只存儲一次// 判斷當前的newArray數組中是否已經有該元素 if (newArray.indexOf(key) === -1) {newArray.push(key);}}}return newArray;} var array = ['c', 'a', 'z', 'a', 'x', 'a'];var newArray = clear(array);console.log(newArray);
⑷ JS數組去重的幾種常見方法
js 數組去重
1
註:應該也可以適用於 object數組,但是本人沒有進行驗證,貼出來僅供你參考
第一種是比較常規的方法思路:1.構建一個新的數組存放結果2.for循環中每次從原數組中取出一個元素,用這個元素循環與結果數組對比3.若結果數組中沒有該元素,則存到結果數組中代碼如下:
Array.prototype.unique1 = function(){ var res = [this[0]]; for(var i = 1; i < this.length; i++){ var repeat = false; for(var j = 0; j < res.length; j++){ if(this[i] == res[j]){ repeat = true; break; } } if(!repeat){ res.push(this[i]); } } return res;}var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]alert(arr.unique1());
第二種方法比上面的方法效率要高思路:1.先將原數組進行排序2.檢查原數組中的第i個元素 與 結果數組中的最後一個元素是否相同,因為已經排序,所以重復元素會在相鄰位置3.如果不相同,則將該元素存入結果數組中代碼如下:
Array.prototype.unique2 = function(){ this.sort(); //先排序 var res = [this[0]]; for(var i = 1; i < this.length; i++){ if(this[i] !== res[res.length - 1]){ res.push(this[i]); } } return res;}var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]alert(arr.unique2());
二種方法也會有一定的局限性,因為在去重前進行了排序,所以最後返回的去重結果也是排序後的。如果要求不改變數組的順序去重,那這種方法便不可取了。第三種方法(推薦使用)思路:1.創建一個新的數組存放結果2.創建一個空對象3.for循環時,每次取出一個元素與對象進行對比,如果這個元素不重復,則把它存放到結果數組中,同時把這個元素的內容作為對象的一個屬性,並賦值為1,存入到第2步建立的對象中。說明:至於如何對比,就是每次從原數組中取出一個元素,然後到對象中去訪問這個屬性,如果能訪問到值,則說明重復。代碼如下:
Array.prototype.unique3 = function(){ var res = []; var json = {}; for(var i = 0; i < this.length; i++){ if(!json[this[i]]){ res.push(this[i]); json[this[i]] = 1; } } return res;}var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];alert(arr.unique3());
⑸ 有序數組去重的幾種演算法
這個問題的意思是,如果假設一個數組中存在重復的數據項,那麼就中保留重復數據項中的一個。也就是說最終輸出的結果數組中不容許存在重復數據項,所以因為這里涉及到重復數據項的問題,所以立馬想到了集合(Set)這個數據結構,因為它是不容序存在重復數據項的數據結構,
思路1.也就是將數組中的所有元素插入到一個Set中,利用Set的自動剔除重復數據項的功能,將導致所有重復數據項沒有辦法插入成功,也就是add方法
返回false,然後調用toArray方法,返回這個集合所對應的數組。那麼這個數組就是一個沒有重復數據項的數組,利用這個方法,通過比較結果數組和
源數組之間的大小,查看源數組中到底是否存在重復數據項。
思路2.除了利用Set這個數據結構不容序存在重復數據項的功能之外,還有一種很容易想到的方法,也就是對整個數組進行排序,然後遍歷排序之後的數組,將重復數據項,清除掉。
思路1的實現:
public static int[] noDup(int[] array) {
Set<Integer> set = new
HashSet<Integer>();
for (int i :
array)
set.add(i);
Integer[]
integers = (Integer[]) set.toArray();
int[] result
= new int[integers.length];
for (int i =
0; i < integers.length; i++)
result[i] =
integers[i];
return
result;
}
思路2的實現:
使用快速排序等演算法對數組進行排序,這個排序過程不在介紹。假設下面這個演算法的輸入是一個幾經排好序的數組。
for (int i = 0; i < array.length - 1; i++) {
if (array[i]
== array[i + 1]) {
array[i] =
-1;
}
}
通過上面這段代碼就能夠實現把數組中所有的重復數據項只保留一個,其它的置為-1或者根據實際情況置成其它值。然後遍歷數據,刪除所有位-1的數據項,並且將數組中包含的記錄個數不斷減少即可。
⑹ JavaScript 數據去重的常用幾種方法
寫一個先:
functionclear(arr){
//1如何獲取數組中每一個元素出現的次數
varo={};//1.1記錄數組中元素出現的次數
for(vari=0;i<arr.length;i++){
varitem=arr[i];//數組中的每一個元素
//o[item]=1;
//1.2判斷o對象是否有當前遍歷到的屬性
if(o[item]){
//如果o[item]存在,說明次數不為1
o[item]++;
}else{
//如果o[item]不存在,說明是第一次出現
o[item]=1;
}
}
//console.log(o);
//2生成一個新的數組,存儲不重復的元素
varnewArray=[];
//2.1遍歷對象o中的所有屬性
for(varkeyino){
//2.2判斷o對象中當前屬性的值是否為1如果為1說明不重復直接放到新數組中
if(o[key]===1){
newArray.push(key);
}else{
//o對象中當前屬性次數不為1,說明有重復的,如果有重復的話,只存儲一次
//判斷當前的newArray數組中是否已經有該元素
if(newArray.indexOf(key)===-1){
newArray.push(key);
}
}
}
returnnewArray;
}
vararray=['c','a','z','a','x','a'];
varnewArray=clear(array);
console.log(newArray);
⑺ javascript怎樣數組去重並排序.效率最快的
以下是我針對網上三種高效率方法總結與效率測試,如果大家有更好的意見或建議也可以提出,大家共勉學習。
數組去重法1:
Array.prototype.unique1 = function(){ console.time("數組去重法1"); //記錄開始執行的時間 var arr = []; //創建一個臨時數組 var obj = {}; //創建一個空對象 for(var i = 0; i < this.length; i++){ //遍歷當前要去重的數組 if(!obj[this[i]]){ //判斷obj對象中是否存有當前項,沒有則執行 arr.push(this[i]); //將當前項push到臨時數組中 obj[this[i]] = 1; //將當前項存入obj對象 } } console.timeEnd("數組去重法1"); //記錄結束執行的時間 return arr; }
數組去重法2:
Array.prototype.unique2 = function(){ console.time("數組去重法2"); //記錄開始執行的時間 var arr = []; //創建一個臨時數組 for(var i = 0; i < this.length; i++){ //遍歷當前要去重的數組 if(arr.indexOf(this[i]) == -1){ //判斷臨時數組中是否存有當前項,沒有則執行 arr.push(this[i]); //將當前項push到臨時數組中 } } console.timeEnd("數組去重法2"); //記錄結束執行的時間 return arr; }
數組去重法3:
Array.prototype.unique3 = function(){ console.time("數組去重法3"); //記錄開始執行的時間 var arr = [this[0]]; //創建一個臨時數組,並將要去重數組的第一項存入臨時數組 for(var i = 1; i < this.length; i++) { //從要去重數組第二項開始遍歷 if (this.indexOf(this[i]) == i){ //判斷臨時數組中是否存有當前項,沒有則執行 arr.push(this[i]); //將當前項push到臨時數組中 } } console.timeEnd("數組去重法3"); //記錄結束執行的時間 return arr; }
效率測試方法:
var arr1 = []; //創建一個要去重的數組 for(var i = 0; i < 200000; i++){ //遍歷200000個數據 arr1.push(parseInt(Math.random() * 10) + 1); //將所有數據返回為隨機數(1-10之間)的數, 並push到要去重的數組中 } console.log(arr1.unique1()); //列印數組去重法1的執行時間 console.log(arr1.unique2()); //列印數組去重法2的執行時間 console.log(arr1.unique3()); //列印數組去重法3的執行時間
效率測試結果:
總結
以上就是關於JavaScript幾種數組去重的方法效率測試,希望測試的結果對大家選擇使用數組去重方法能有所幫助,如果有疑問大家可以留言交流。謝謝大家對腳本之家的支持。
⑻ JS數組去重的幾種方法
function clear(arr) {
// 1 如何獲取數組中每一個元素出現的次數
var o = {}; // 1.1 記錄數組中元素出現的次數
for (var i = 0; i < arr.length; i++) {
var item = arr[i]; // 數組中的每一個元素
// o[item] = 1;
// 1.2 判斷o對象是否有當前遍歷到的屬性
if (o[item]) {
// 如果o[item] 存在,說明次數不為1
o[item]++;
} else {
// 如果o[item] 不存在,說明是第一次出現
o[item] = 1;
}
}
// console.log(o);
// 2 生成一個新的數組,存儲不重復的元素
var newArray = [];
// 2.1 遍歷對象o中的所有屬性
for (var key in o) {
// 2.2 判斷o對象中當前屬性的值是否為 1 如果為1 說明不重復直接放到新數組中
if (o[key] === 1) {
newArray.push(key);
} else {
// o對象中當前屬性 次數不為1 ,說明有重復的,如果有重復的話,只存儲一次
// 判斷當前的newArray數組中是否已經有該元素
if (newArray.indexOf(key) === -1) {
newArray.push(key);
}
}
}
return newArray;
}
var array = ['c', 'a', 'z', 'a', 'x', 'a'];
var newArray = clear(array);
console.log(newArray);
⑼ 數組去重的幾種封裝方法
具體代碼就不給了,思路給你,先把list數組遍歷到set數組,然後再把set數據遍歷生成一個list數組,具體原理其實就是list數組是可以有重復元素的,但是set數組不能有重復元素,所以就可以去重復