1. 程式人生 > >Js中去除陣列中重複元素的4種方法

Js中去除陣列中重複元素的4種方法

    今天工作遇到此問題,嘗試多個方法不盡人意,故此寫個部落格來總結一下如何在js中去除重複元素。

    方法1:        

        Array.prototype.method1 = function(){
            var arr[];    //定義一個臨時陣列
            for(var i = 0; i < this.length; i++){    //迴圈遍歷當前陣列
                //判斷當前陣列下標為i的元素是否已經儲存到臨時陣列
                //如果已儲存,則跳過,否則將此元素儲存到臨時陣列中
                if(arr1.indexOf(this[i]) == -1){
                    arr.push(this[i]);
                }
            }
            return arr;
        }

    方法2:

        
        Array.prototype.method2 = function(){
            var h{};    //定義一個hash表
            var arr[];  //定義一個臨時陣列
            
            for(var i = 0; i < this.length; i++){    //迴圈遍歷當前陣列
                //對元素進行判斷,看是否已經存在表中,如果存在則跳過,否則存入臨時陣列
                if(!h[this[i]]){
                    //存入hash表
                    h[this[i]] = true;
                    //把當前陣列元素存入到臨時陣列中
                    arr.push(this[i]);
                }
            }
            return arr;
        }

    方法3:

        Array.prototype.method3 = function(){
            //直接定義結果陣列
            var arr[this[0]];
            for(var i = 1; i < this.length; i++){    //從陣列第二項開始迴圈遍歷此陣列
                //對元素進行判斷:
                //如果陣列當前元素在此陣列中第一次出現的位置不是i
                //那麼我們可以判斷第i項元素是重複的,否則直接存入結果陣列
                if(this.indexOf(this[i]) == i){
                    arr.push(this[i]);
                }
            }
            return arr;
        
        }

    方法4:

        Array.prototype.method4 = function(){
            //將陣列進行排序
            this.sort();
            //定義結果陣列
            var arr[this[0]];
            for(var i = 1; i < this.length; i++){    //從陣列第二項開始迴圈遍歷陣列
                //判斷相鄰兩個元素是否相等,如果相等說明資料重複,否則將元素寫入結果陣列
                if(this[i] !== arr[arr.length - 1]){
                    arr.push(this[i]);
                }            
            }
            return arr;
            
        }

    例如:

        var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
        alert(arr.method3());

    方法1和方法3都用到了陣列的indexOf()方法,此方法主要用來查詢元素在陣列中第一次出現的位置。比較浪費資源和時間。

    方法2使用的是hash表,把已經出現過的元素通過下標形式寫入到一個object內,下標的引用要比用陣列indexOf()方法搜尋節省時間。

    方法4是先將陣列排序,然後一次比較相鄰的兩個元素的值,排序使用的是js原生的sort()方法。

    讀者可以自行編寫程式測試四種方法的效率如何。例如:首先利用隨機函式生成一個50000長度的隨機數陣列,然後分別用四種方法進行執行,記錄程式執行時間進行比較四種方法的優劣。

相關推薦

Js去除陣列重複元素4方法

    今天工作遇到此問題,嘗試多個方法不盡人意,故此寫個部落格來總結一下如何在js中去除重複元素。     方法1:                 Array.prototype.method1 = function(){             var arr[

js去除陣列重複元素去除陣列相鄰的重複元素

//去除陣列的重複元素 Array.prototype.distinct = function(){ var $ = this; var o1 = {}; var o2 = {}; var o3 = []; var o; for(var i=0;o = $[i]

JS去除陣列的無效值(空,undefined, null, false)

1.Array.filter() arr.filter(item => item) 2.也可以通過遍歷判斷陣列, 空字元,undefined, null, false 轉化為布林型別都是 false; let arr=[1, , null, false, undefined,

Linux執行shell腳本的4方法

linux shell 這篇文章主要介紹了Linux中執行shell腳本的4種方法總結,即在Linux中運行shell腳本的4種方法,需要的朋友可以參考下。bash shell 腳本的方法有多種,現在作個小結。假設我們編寫好的shell腳本的文件名為hello.sh,文件位置在/root/bin目錄中

html5讓頁面縮放的4方法

1.viewport這種方法,不是所有的瀏覽器都相容<meta name="viewport" content="width=640,minimum-scale=0.5,maximum-scale=1.0,user-scalable=no, initial-scale

JS去除陣列重複元素

var arr =["2017-12", "2017-12", "2017-12", "2018-02", "2018-02", "2018-02", "2018-02", "2018-02", "20

js怎麼刪除陣列重複元素

刪除陣列中重複的元素 剛剛看到這篇文章,就立馬過來收藏,雖然還沒看懂,希望我再研究一下面是統計陣列中重複元素的個數 var arr = []; var result = [‘2017年6月’, ‘2017年6月’, ‘2017年6月’, ‘2017年5月’, ‘2017年5月’, ‘20

c++ 去除陣列重複元素

for(int i=0;i<len;i++) { for(int j=i+1;j<len;j++) { if(x[j]==x[i]) { for(int k=j+1;k

去除陣列所有重複元素

//去除陣列中重複元素 var arr = [0,2,3,1,5,5,8,8,2,1,10,10,43,43]; var json = {}; for (var i = 0; i < arr.length; i++) { if (!json[arr[i]]) {

iOS去除陣列重複元素的幾方法

//第一種:利用NSDictionary的allKeys(allValues)方法。 NSArray *array = @[@"2016-10-1",@"2016-10-9",

去除陣列重複元素-JAVA

要求:去除二維陣列中的重複元素思路:試試不用集合的方式去重複元素,首先我想到的是需要一個去重後儲存元素的新陣列,然後在兩層巢狀迴圈,外層遍歷原陣列,內層逐一判斷是否和後面的元素重合,然後在存入新陣列。(這時候會出現一個問題,請往下看!)// 1、去除陣列中重複的元素 pub

JS(ES6)去除陣列重複記錄

1.雙層迴圈,外層迴圈元素,內層迴圈時比較值;如果有相同的值則跳過,不相同則push進陣列 // formatConcatArr(array)==[ 1, 23, 2, 3 ]  formatConcatArr(array)=={{formatConcatArr([1,

去除陣列重複元素

#include<vector> #include<algorithm> #include<iostream> using namespace std; int Unique(int array[],int arrayLength){ int length=1; //去除

js 去除陣列的空值以及陣列判斷是否有重複資料

1、判斷是否有重複資料 function isRepeat(array){ var hash = {}; for(var i in array) { if(array[i]!=""){ if(hash[array[i]])

RF-去除陣列重複元素

1、去除陣列中重複元素 ${Record1} create list 1 1 2 2 ${len} Get Length ${Record1} #len=4 log many ${Recor

去除陣列重複資料

public class DeleteDuplicate {     public static void main(String[] args) {         int[] array = new int

bootstrap 多選按鈕實現方式,js,jQuery刪除陣列指定元素

bootstrap有許多,非常漂亮的設計,不用自己苦惱於css 的使用。 bootstrap使用,實現多選方法: 1、使用bootstrap的表格標籤,表格內容為PHP返回前端資料, <table class="table table-hover table-bordered"

JS-從排序陣列刪除重複

給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。 不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。 示例1 給定陣列 nums = [1,1,2], 函式應該返回新的長度 2, 並

iOS 去除陣列重複資料的幾方法

第一種:利用NSDictionary的AllKeys(AllValues)方法 程式碼: NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-03", @"2014-04-01",

【刷題】去除陣列唯一重複的數

題意:一個數組,裡面只有一個重複的數,找出這個重複的數,並考慮時間複雜度。 分析: 1,如果去過該陣列是存在某個範圍之內,且佔滿了該範圍,只多了一個數,如陣列有101個數,數的範圍是[1, 100]。就是說該陣列中的數包含了1到100所有的數,且第101個數也是在[1, 100]範圍內的