首頁 > web前端 > js教程 > 主體

javascript數組去重怎麼做

青灯夜游
發布: 2023-01-07 11:47:32
原創
2219 人瀏覽過

方法:1、利用「[...new Set(arr)]」語句;2、利用「Array.from(new Set(arr))」語句;3、利用filter和indexOf函數; 4.利用雙重for循環,檢查值是否重複,如果重複就使用push()刪除。

javascript數組去重怎麼做

本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

方法1:[…new Set(arr)]

const arr = [1, 2, 3, 2, 3];
[...new Set(arr)]; // [1, 2, 3]
登入後複製

方法2:Array.from(new Set(arr))

const arr = [1, 2, 3, 2, 3];
Array.from(new Set(arr)); // [1, 2, 3]
登入後複製

由於Set 中的元素是唯一的,無論是原始值或是物件引用,所以可以透過將陣列轉換成Set 物件來實現去重

Array.from方法可以將Set物件轉換成數組。

方法3:利用filter indexOf

function unique(arr) {
  return arr.filter(function(item, index, arr) {
    //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素
    return arr.indexOf(item, 0) === index;
  });
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
//[1, "true", true, 15, false, undefined, null, "NaN", 0, "a", {…}, {…}]
登入後複製

方法4:雙重for 迴圈

最容易理解的方法,外層循環遍歷元素,內層循環檢查是否重複

當有重複值的時候,可以使用push(),也可以使用splice()

function distinct(a, b) {
    let arr = a.concat(b);
    for (let i=0, len=arr.length; i<len; i++) {
        for (let j=i+1; j<len; j++) {
            if (arr[i] == arr[j]) {
                arr.splice(j, 1);
                // splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一
                len--;
                j--;
            }
        }
    }
    return arr
}
登入後複製

但這種方法佔用的內存較高,效率也是最低的

javascript數組去重怎麼做

方法5:for...of  includes()

##雙for迴圈的升級版,外層用for...of 語句取代for 迴圈,把內層迴圈改為 includes()

先建立一個空數組,當includes() 回傳false 的時候,就將該元素push到空數組中 

類似的,也可以用indexOf() 來取代includes()

function distinct(a, b) {
    let arr = a.concat(b)
    let result = []
    for (let i of arr) {
        !result.includes(i) && result.push(i)
    }
    return result
}
登入後複製

javascript數組去重怎麼做

【推薦學習:

javascript高階教程

以上是javascript數組去重怎麼做的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!