Javascript中數組去重的六種方法

數組去重

  • 第一種方法:
  • 先對數組進行排序sort(),排好序,然后把數組的當前項和后一項進行比較,相同則使用數組的splice(相同的位置,1),但是為了防止數組塌陷,每次刪除數組元素的時候要把i的值減一。
        var ary=[1,23,4,2,33,1,2,44,3,2,3]ary.sort(function(a,b){return a-b;});//返回的是排好序的數組for(var i=0;i<ary.length;i++){if(ary[i]===ary[i+1]){ary.splice(i,1);i--;//為了防止數組塌陷}}
  • 第二種方法是:建立一個新數組,要是原數組里面的數是頭一次出現(使用數組的indexOf()),那么就把這個數放到新數組里面,否者就拋棄這個數,類似于前面說的隨機驗證碼
var ary=[1,23,4,2,33,1,2,44,3,2,3]var arr2=[];
for(var i=0;i<ary.length;i++){
if(arr2.indexOf(art[i])==-1){
arr2.push(ary[i]);
}
}
  • 第三種方法:直接拿當前項與后一項進行比較,相同的要刪除,使用數組splice()進行刪除,這里也要防止數組塌陷;
var ary=[1,23,4,2,33,1,2,44,3,2,3]
for(var i=0;i<ary.length;i++){
for(var j=i+1;j<ary.length;j++){if(ary[i]===ary[j]){
ary.splice(j,1);
j--;
}
}
}
  • 第四種方法:利用對象不重名的特性,對象的存儲是鍵值對方式,要獲取屬性值,要通過對象./[]屬性來獲取;相同則刪除,也要防止數組塌陷
var ary=[1,23,4,2,33,1,2,44,3,2,3]
//新建一個對象
var obj={};
for(var i=0;i<ary.length;i++){
var cur=ary[i];
//如果obj【cur】為真,那就說明對象里面找到了這個數,重復了
if(obj[cur]){
ary.splice(i,1);
i--;
}else{
//給對象賦值  說明obj.xxx=undefined  不存在為假
obj[cur]=cur;//obj【1】=1;
}
}
  • 第五種方法:也是利用對象不重名的方法,但是這次是直接計算其數組各個數的重復次數,
var ary=[1,23,4,2,33,1,2,44,3,2,3]
var obj={};
for(var i=0;i<ary.length;i++){var cur=ary[i];if(obj[cur]){//每次重復一次,其對應的值加一obj[cur]++;
}else{
//說明沒有重復,個數只有一個
obj[cur]=1;
}
}
var ary2=[];
//對于對象使用in 方法進行遍歷,遍歷獲取的是屬性值
for(var attr in obj){ary2.push(Number(attr));
}
  • 第六種方法:使用ES6中的Set數據結構中重復項不生效的特性
let arr = [1,2,3,3,2,4,5];let list = new Set(arr);console.log("list",list);  // 1,2,3,4,5

但是對于數據的數據類型是不會進行轉換的,所以一定要注意元素的數據類型是否是一致

數組去重的面試題:

找出這次考試中,最高分,及最高分出現的次數

//思路:全部人的成績是一個數組,這就相當于使用數組去重的方法,找到最高的分數,和其次數,首先找到了去重的數組進行從小到大的排序,得到次數,然后通過最高分所對應的索引值得到出現的最高分var ary = [1, 23, 4, 2, 33, 1, 2, 44, 3, 2, 3];var obj = {};for(var i = 0; i < ary.length; i++) {//把數組的值,當作對象的索引賦值給對象,所以通過對象索引獲取的是數組出現的次數var cur = ary[i];if(obj[cur]) {//每次重復一次,其對應的值加一obj[cur]++;} else {//說明沒有重復,個數只有一個obj[cur] = 1;}}//分數從低到高出現的次數console.log(obj);var ary2 = [];//對于對象使用in 方法進行遍歷,遍歷獲取的是屬性值for(var attr in obj) {ary2.push(Number(attr));}console.log(ary2);//最高分console.log(ary2[ary2.length-1]);var count=ary2[ary2.length-1];//最高分出現的次數console.log(obj[count]);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286973.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286973.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286973.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GIS宣傳片《地理空間信息革命》視頻全集

《地理空間信息革命》第一集 《地理空間信息革命》第一集&#xff1a;介紹了全球定位系統&#xff08;GPS&#xff09;&#xff0c;地理空間信息系統&#xff08;GIS&#xff09;和數字測繪和地理空間技術的歷史和應用。 《地理空間信息革命》第二集 《地理空間信息革命》第二集…

1小時學會不打代碼制作一個網頁精美簡歷(1)

作者簡介 作者名&#xff1a;1_bit 簡介&#xff1a;CSDN博客專家&#xff0c;2020年博客之星TOP5&#xff0c;藍橋簽約作者。15-16年曾在網上直播&#xff0c;帶領一批程序小白走上程序員之路。歡迎各位小白加我咨詢我相關信息&#xff0c;迷茫的你會找到答案。系列教程將會在…

分部方法 partial

當有如下這樣類似的情況出現的時候&#xff0c;可以有更好的優化方式來處理&#xff0c;那就是分部方法 1 class PartOld2 {3 string name;4 5 public virtual void OnChangeName(string str)6 {7 }8 9 public string Name 10…

Android之解決APP奔潰重啟導致Fragment白屏問題

1、問題 問題APP奔潰重啟導致依附的Fragment白屏問題 2、分析 app奔潰重啟Activity肯定更新了,但是依附在Activity里面的fragment有緩存,用的是以前的activity的content,所以獲取到是空的, 就會導致fragment依附失敗,我們只需要activity不要保存當前fragment就行,直接不…

一文講透為Power Automate for Desktop (PAD) 實現自定義模塊

今天寫了一篇長文&#xff0c;《一文講透為Power Automate for Desktop (PAD) 實現自定義模塊 - 附完整代碼》&#xff0c;有興趣的同學點擊 “閱讀原文” 參考 &#xff0c;文章地址是 https://www.cnblogs.com/chenxizhang/p/16287195.html 微軟的PAD是RPA的一種&#xff0…

Linux學習一天一個命令(2)[cd命令]

Linux cd 命令可以說是Linux中最基本的命令語句&#xff0c;其他的命令語句要進行操作&#xff0c;都是建立在使用 cd 命令上的。所以&#xff0c;學習Linux 常用命令&#xff0c;首先就要學好 cd 命令的使用方法技巧。1. 命令格式&#xff1a;cd [目錄名]2. 命令功能&#xff…

軟件自動化測試的主要目的,功能測試的目的是什么

從功能測試到自動化測試&#xff1f;從常見的自動化測試過程開始&#xff01;在項目的啟動階段功能測試 目的&#xff0c;我們必須闡明為什么要進行自動化&#xff0c;并選擇合適的項目進行自動化測試. 1.為什么要進行自動化&#xff1f;在開始自動化測試之前&#xff0c;我們需…

基于Google Earth Pro做數字化,并在ArcGIS中轉為Shapefile圖層

在精度滿足要求的前提下,可以基于Google Earth Pro做數字化,并在ArcGIS中轉為Shapefile圖層,然后經行投影轉換,得到最終的shp數據。主要步驟包括:新建多邊形、導出多邊形、格式轉換,投影轉換等。 一. 新建多邊形 命名為皇城水庫范圍,設置線條和面的樣式/顏色,并在影像上…

在Esxi 5.1虛機中安裝OEM服務器系統

需要在vmx配置文件中&#xff0c;增加一行SMBIOS.reflectHost "TRUE" 本文轉自daniel8294 51CTO博客&#xff0c;原文鏈接&#xff1a;http://blog.51cto.com/acadia627/1260215&#xff0c;如需轉載請自行聯系原作者

1小時,不會代碼的我如何完成 網易云音樂 大作業網頁制作?(IVX 第2篇)

作者簡介 作者名&#xff1a;1_bit 簡介&#xff1a;CSDN博客專家&#xff0c;2020年博客之星TOP5&#xff0c;藍橋簽約作者。15-16年曾在網上直播&#xff0c;帶領一批程序小白走上程序員之路。歡迎各位小白加我咨詢我相關信息&#xff0c;迷茫的你會找到答案。系列教程將會在…

CentOS5.11安裝Mac桌面主題

首先下載Mac4Lin_Install_v1.0.zip 給出個下載地址http://www.kuaipan.cn/file/id_60980504015219653.htm 最好切換到普通用戶進行操作&#xff0c;安裝過程需要幾次確認&#xff0c;推薦n [weilocalhost 桌面]$>>> unzip Mac4Lin_I…

java基礎題,錯

Which statement declares a variable a which is suitable for referring to an array of 50 string objects?正確答案: B C F 你的答案: D F (錯誤) char a[][]; String a[]; String[]a; Object a[50]; String a[50]; Object a[]; BCF 在java 中&#xff0c;聲明一個數組時…

C# 第一個LINQ 查詢

我們將先介紹一個示例&#xff0c;這個示例使用 LINQ 創建了一個查詢&#xff0c;以便在一個簡單的內存對象數組中查找一些數據&#xff0c;并輸出到控制臺上。試一試&#xff1a;第一個 LINQ 程序&#xff1a;按照下面的步驟在 Visual Studio 中創建示例&#xff1a; using Sy…

佳鑫諾計算機模擬卷答案,微機原理練習冊答案佳鑫諾).docx

PAGE 17計算機系統1&#xff0e;簡述名詞的概念&#xff1a;微處理器、微型計算機、微型計算機系統。答&#xff1a;(1)微處理器&#xff1a;微處理器(Microprocessor)簡稱μP或MP&#xff0c;或CPU。CPU是采用大規模和超大規模集成電路技術將算術邏輯部件ALU(Arithmetic Logic…

1小時賺300塊,不打代碼幫人做個吃雞網頁 [IVX實戰第3篇]

作者簡介 作者名&#xff1a;1_bit 簡介&#xff1a;CSDN博客專家&#xff0c;2020年博客之星TOP5&#xff0c;藍橋簽約作者。15-16年曾在網上直播&#xff0c;帶領一批程序小白走上程序員之路。歡迎各位小白加我咨詢我相關信息&#xff0c;迷茫的你會找到答案。 實戰目錄 1…

ArcGIS10.6中,在3D分析工具中創建視線之后,怎么將其刪除?

如下圖所示&#xff0c; 為3D分析工具條&#xff1a; 在3D分析中創建的線&#xff0c;例如做剖面圖是插入的線&#xff0c;該怎樣刪除呢&#xff1f; 如下圖所示。 刪除方法是&#xff0c;先使用如下選擇工具&#xff0c;然后雙擊線條&#xff0c;再按delete鍵。

Android之解決底部4個TextView占比例大小不一致問題

1、問題 底部4個TextView切換多語言了&#xff0c;占據的比例大小不一致。 2、原因 雖然在每個LinearLayout里面寫了 android:layout_weight"1" 但是我還加了 android:layout_width"wrap_content" 感覺被自己傻哭了 3、 解決辦法 把 android:layo…

RPC的原理總結

一.RPC的引入 早期單機時代&#xff0c;一臺電腦上運行多個進程&#xff0c;大家各干各的&#xff0c;老死不相往來。假如A進程需要一個畫圖的功能&#xff0c;B進程也需要一個畫圖的功能&#xff0c;程序員就必須為兩個進程都寫一個畫圖的功能。這不是整人么&#xff1f;于是就…

怎樣實現MathType中帶箭頭向量的輸入

2019獨角獸企業重金招聘Python工程師標準>>> 一個向量可以有多種記法&#xff0c;如記作粗體的字母&#xff08;a&#xff09;&#xff0c;或在字母頂上加一小箭頭→&#xff0c;或在字母下加波浪線~。如果給定向量的起點&#xff08;A&#xff09;和終點&#xff0…

1小時零基礎賺一千,教你完成圖書管理系統,不用打代碼絕對學得會![完整全站教學 IVX 實戰第四篇]

作者簡介 作者名&#xff1a;1_bit 簡介&#xff1a;CSDN博客專家&#xff0c;2020年博客之星TOP5&#xff0c;藍橋簽約作者。15-16年曾在網上直播&#xff0c;帶領一批程序小白走上程序員之路。歡迎各位小白加我咨詢我相關信息&#xff0c;迷茫的你會找到答案。 必看提示 項…