1. 程式人生 > >前端之JS-陣列去重

前端之JS-陣列去重

方法1:簡單粗暴的ES6方法Set,Set資料結構,它類似於陣列,其成員的值都是唯一的。
var arr = [1, 2, 3, 2, 1, 3];
console.log(new Set(arr))//列印結果:Set(3) {1, 2, 3}

方法2:使用filter過濾函式去重。
var arr = [1, 2, 3, 1, 2, 3];
console.log(arr.filter((v, i, arr) => arr.indexOf(v) === i))//列印結果:(3) [1, 2, 3]

方法3:遍歷陣列法。
function unique(array) {
   var n = []; //一個新的臨時陣列 
    //遍歷當前陣列 
    for (var i = 0; i < array.length; i++) {
        if (n.indexOf(array[i]) == -1) n.push(array[i]);
        //如果當前陣列的第i已經儲存進了臨時陣列,那麼跳過, 
        //否則把當前項push到臨時數組裡面 
    }
    return n;
}
 console.log(unique([1, 2, 3, 1, 2, 3])) //列印結果:(3) [1, 2, 3]
if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function (el) {
        for (var i = 0, n = this.length; i < n; i++) {
            if (this[i] === el) {
                return i;
            }
        }
        return -1;
    }
}

方法4:利用splice()方法直接在原陣列進行操作。 
雙層迴圈,外層迴圈元素,內層迴圈時比較值。
值相同時,則刪去這個值。刪除元素之後,需要將陣列的長度也減1。
Array.prototype.unique = function () {
    var arr = this,
        i,
        j,
        len = arr.length;
    for (i = 0; i < len; i++) {
        for (j = i + 1; j < len; j++) {
            if (arr[i] == arr[j]) {
                arr.splice(j, 1);
                len--;
                j--;
            }
        }
    }
    return arr;
};
var a = [1, 2, 3, 1, 2, 3];
var b = a.unique();
console.log(b); //列印結果:(3) [1, 2, 3]

方法5:利用物件的屬性不能相同的特點進行去重
    Array.prototype.unique = function () {
    var arr = this,
        i,
        obj = {},
        result = [],
        len = arr.length;
    for (i = 0; i < arr.length; i++) {
        if (!obj[arr[i]]) { //如果能查詢到,證明陣列元素重複了
            obj[arr[i]] = 1;
            result.push(arr[i]);
        }
    }
    return result;
};
var a = [1, 2, 3, 1, 2, 3];
var b = a.unique();
console.log(b); //列印結果:(3) [1, 2, 3]

方法6:陣列遞迴去重
    Array.prototype.unique = function () {
    var arr = this,
        len = arr.length;
    arr.sort(function (a, b) { //對陣列進行排序才能方便比較
        return a - b;
    })

    function loop(index) {
        if (index >= 1) {
            if (arr[index] === arr[index - 1]) {
                arr.splice(index, 1);
            }
            loop(index - 1); //遞迴loop函式進行去重
        }
    }
    loop(len - 1);
    return arr;
};
var a = [1, 2, 3, 1, 2, 3];
var b = a.unique();
console.log(b); //列印結果:(3) [1, 2, 3]

相關推薦

前端JS-陣列

方法1:簡單粗暴的ES6方法Set,Set資料結構,它類似於陣列,其成員的值都是唯一的。 var arr = [1, 2, 3, 2, 1, 3]; console.log(new Set(arr))//列印結果:Set(3) {1, 2, 3} 方法2:使用

從dedup說起JS陣列

作者: Cheng, Pengpeng 在JavaScript中,陣列去重是一個基本的操作,方法眾多:遍歷去重到Set、Map去重、hashTable、LodashUniq,陣列中是否存在物件、函式,每個去重方法的表現各有差異,本文將以此作為切入點深入原始碼進行分析。

htmljs陣列(面試題)

陣列去重 <!DOCTYPE html> <html lang="en"> <head> <title>陣列去重</title>

JS陣列利用set資料結構

在常用的JS去重方法中,都是通過迴圈遍歷來去重,難免麻煩了不少。這邊發現ES6中有更加方便的去重方式,記錄一下。 1、set資料結構 ES6提供了新的資料結構Set。類似於陣列,只不過其成員值都

好程式設計師web前端培訓JavaScript陣列方法

開發十年,就只剩下這套架構體系了! >>>   

js陣列扁平化

陣列去重 var arr = [1, 43, 4, 3, 2, 4, 3]; // 去重後 arr = [1, 43, 4, 3, 2] 傳統方法,for迴圈實現 function dedupe(arr) { var rets = []; f

JS--陣列的幾種常見方法

一、簡單的去重方法 // 最簡單陣列去重法 /* * 新建一新陣列,遍歷傳入陣列,值不在新陣列就push進該新陣列中 * IE8以下不支援陣列的indexOf方法 * */ function uniq(array){ var temp = []; //一個新的臨時陣列 for(v

js陣列六法

方法一: 雙層迴圈,外層迴圈元素,內層迴圈時比較值,如果有相同的值則跳過,不相同則push進陣列 Array.prototype.distinct = function(){  var arr = this,   result = [],   

js 陣列小技巧

js 陣列去重小技巧 Intro 今天遇到一個問題,需要對資料進行去重,想看一下有沒有什麼比較方便的方法,果然有些收穫。 Question 問題描述: 我有一個這樣的資料: [ { "ProjectId": "94147992363ef910", "Proj

js 陣列方法總結

js 陣列去重方法應該是面試中比較常問到的一個問題,今天在網上找了一些相關資料,在這裡做下總結!廢話不多說直接上程式碼! 方法一: var arr = [0,2,3,4,4,0,2]; var obj = {}; var tmp = []; for(var i = 0 ;i<

JS陣列

1.遍歷陣列法 它是最簡單的陣列去重方法(indexOf方法) 實現思路:新建一個數組,遍歷去要重的陣列,當值不在新陣列的時候(indexOf為-1)就加入該新陣列中; var arr=[2,8,5,0,5,2,6,7,2]; function unique1(arr)

js陣列排序

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>www.jb51.net 陣列去重</title> </head>

js 陣列

有時候我們做專案的時候往往會需要把數組裡面一些重複的項去掉,但是原生JS有排序,有篩選等等,但是就是沒有陣列去重怎麼辦呢? 這能怎麼辦,自己手動實現嘛。(以下程式碼直接在原型上新增的的方法,為的就是和原生JS方法類似)可以達到Array.xxx()這樣的效果 第一種方法:建立空陣列利用indexOf方法檢測

js陣列方法整理

一、利用ES6 Set去重(ES6中最常用) function removeDup(){ return Array.from(new Set(arr)); } var arr = [1,1,'true','true',true,true,15,15,fal

js--陣列

一、普通的方法去重 1、簡單的去重方法 // 最簡單陣列去重法 /* * 新建一新陣列,遍歷傳入陣列,值不在新陣列就push進該新陣列中 * IE8以下不支援陣列的indexOf方法 * *

js陣列有哪些方法?

原生js去重方法 1. 冒泡去重 function unique(arr){ var res=[]; for(var i=0,len=arr.length;i<len;i++){ var obj = arr[i];

js 陣列 + 是否包含指定字串 + 深淺拷貝+數組合並

window.uniq=function (array){ array.sort(); var temp=[array[0]]; for(var i = 1; i < array.length; i++){

js陣列並且升序排序常用方法總結

方法一:雙層迴圈,外層迴圈元素,內層迴圈時比較值如果有相同的值則跳過,不相同則push進陣列Array.prototype.distinct = function(){ var arr = this, result = [], i, j, len = arr

JS陣列JS根據數組裡面的物件屬性值

js陣列簡單去重   1 2 3 4 5 6 7 8 9 10 11 12 var arr1 = [1, 2, 3, 4, 5, 6, 3, 4, 3]; function arrayUnique1(arr) {   

原生JS陣列的幾種方法

有時候我們做專案的時候往往會需要把數組裡面一些重複的項去掉,但是原生JS有排序,有篩選等等,但是就是沒有陣列去重怎麼辦呢? 這能怎麼辦,自己手動實現嘛。(以下程式碼直接在原型上新增的的方法,為的就是和原生JS方法類似)可以達到Array.xxx()這樣的效果 第一種方法:建