目錄
#建立陣列
判斷是不是陣列
類別數組和數組的轉換
陣列去重
1)利用 set 去重
2)雙重循環 splice
3)新數組includes
4)reduce includes
5)新數組sort
6)新建數組利用對象屬性
7)利用map
8)filter indexOf
首頁 web前端 js教程 總結分享JavaScript數組常見操作

總結分享JavaScript數組常見操作

Feb 18, 2022 pm 05:16 PM
html javascript 前端

本篇文章為大家帶來了關於javascript中數組常見操作的相關知識,其中包括創建數組、判斷是不是數組、類別數組和數組轉換以及數組去重的相關問題,希望對大家有幫助。

總結分享JavaScript數組常見操作

相關推薦:javascript學習教學

#建立陣列

建立陣列是基本功,其方法主要包括以下幾種:

const arr = [1,2,3]                   
// 数组字面量const arr = [,,,]                     
// 三元素空位数组(hole array)const arr = new Array(4)              
// [,,,,]const arr = new Array(4,2)            
// [4,2]const arr = Array.of(1,2,3)           
// [1,2,3]
登入後複製

其中,我們一般最常用的是陣列字面量法。

判斷是不是陣列

判斷是不是陣列的方法主要有:

// 方法一[1,2,3] instanceof Array   
// 方法二[1,2,3].constructor === Array
// 方法三Object.prototype.toString.call([1,2,3]) === '[object Array]'
// 方法四Array.isArray([1,2,3])
// 方法五(兼容写法)function isArray(arr){
    return Array.isArray ? 
        Array.isArray(arr):Object.prototype.toString.call(arr) === '[object Array]'}
登入後複製

一般最常用的應該是 isArray 方法。

類別數組和數組的轉換

我們有時碰到的資料結構不是純數組,一般將其歸類為“類別數組”,類別數組可以藉助以下方法轉為純數組:

const x = document.querySelectorAll('a');
// 方法一Array.prototype.slice.call(x);
// 方法二Array.from(x);Array.from(x,mapFn,thisArg);
// 方法三[...x]
// 方法四function toArray(x){
    let res = []
    for(item of x){
        res.push(item)
    }
    return res}
    // 方法五Array.apply(null,x)
    // 方法六[].concat.apply([],x)
登入後複製

方法五和六本質上都是利用了apply 的特點,即傳給apply 的第二個參數(數組或者類別數組)會被轉換為一個參數列表,這些參數再送到調用的方法(new Array 或concat)中。

陣列去重

陣列去重,本質上都需要比較兩個元素是否相等,如果相等,則拋棄一個元素。為了精確地判斷,這裡統一使用 Object.is 來比較。

1)利用 set 去重

set 要求元素不重複,因此將陣列轉換為 set 之後就可以去重了,接著再轉換回陣列即可。

function unique(arr){
    return Array.from(new Set(arr))
    // return [...new Set(arr)]}
登入後複製

2)雙重循環 splice

外層循環遍歷所有元素,裡層循環遍歷當前元素往後的所有元素,若發現相等則利用 splice 移除掉一個。記得裡層循環每次要回退一格,否則會遺漏掉某些元素

function unique(arr){
    for(let i = 0;i < arr.length;i++){
        for(let j = i + 1;i < arr.length;j++){
            if(Object.is(arr[i],arr[j])){
                arr.splice(j,1)
                j--
            }
        }
    }
    return arr}
登入後複製

3)新數組includes

新數組,每次往數組中添加元素之前都檢查數組中是否已有該元素:

function unique(arr){
    const res = []
    arr.forEach((item,index) => {
        // 也可以 if(res.indexOf(item) == -1),但是无法正确判断 NaN
        if(!res,includes(item)){
            res.push(item)
        }
    })}
登入後複製

4)reduce includes

function unique(arr){
    return arr.reduce((acc,cur) => {
        // return acc.includes(cur) ? acc : acc.concat(cur)
        return acc.includes(cur) ? acc : [...acc,cur]
    },[])}
登入後複製

5)新數組sort

根據sort 的機制(在每個元素上呼叫toStrng,之後在字串層面進行排序),讓相等的元素聚集在一起。新數組,每次在數組中添加元素之前都會檢查該元素是否等於前面的元素,是則屬於重複元素:

function unique(arr){
    arr.sort()
    const res = [arr[0]]
    for(let i = 1;i < arr.length;i++){
        if(!Object.is(arr[i],arr[i-1])){
            res.push(arr[i])
        }
    }
    return res}
登入後複製

6)新建數組利用對象屬性

這種方法其實跟「新建數組includes」一樣。新建數組,每次在數組中添加元素之前都檢查該元素是否已經作為對象的屬性:

// 对象属性值可以认为是元素重复的次数function unique(arr){
    const res = []
    const obj = {}
    arr.forEach((item,index) => {
        if(!obj[item]){
            res.push(item)
            obj[item] = 1
        } else {
            obj[item]++
        }
    })
    return res}
登入後複製

這裡檢測的是對象的屬性名,而屬性名本質上是一個字符串,因此會認為obj[true]obj["true"]是相等的,從而導致元素true 或元素"true" 未能放入新數組中

7)利用map

本質上和上面的方法是一樣的,但是不需要新數組:

function unique(arr){
    let map = new Map()
    for(item of arr){
        if(!map.has(item)){
            map.set(item,true)
        }
    }
    return [...map.keys()]}
登入後複製

8)filter indexOf

去掉重複的元素,換個角度來理解就是保留那些索引等於第一次出現時的索引的元素,這樣的元素可以用filter 篩選出來,放到一個陣列中:

function unique(arr){
    return arr.filter((item,index) => index === arr.indexOf(item))}
登入後複製

使用indexOf 的缺點是無法正確判斷NaN。

相關推薦:javascript學習教學

#

以上是總結分享JavaScript數組常見操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

HTML 中的表格邊框 HTML 中的表格邊框 Sep 04, 2024 pm 04:49 PM

HTML 表格邊框指南。在這裡,我們以 HTML 中的表格邊框為例,討論定義表格邊框的多種方法。

HTML 中的巢狀表 HTML 中的巢狀表 Sep 04, 2024 pm 04:49 PM

這是 HTML 中巢狀表的指南。這裡我們討論如何在表中建立表格以及對應的範例。

HTML 左邊距 HTML 左邊距 Sep 04, 2024 pm 04:48 PM

HTML 左邊距指南。在這裡,我們討論 HTML margin-left 的簡要概述及其範例及其程式碼實作。

HTML 表格佈局 HTML 表格佈局 Sep 04, 2024 pm 04:54 PM

HTML 表格佈局指南。在這裡,我們詳細討論 HTML 表格佈局的值以及範例和輸出。

HTML 輸入佔位符 HTML 輸入佔位符 Sep 04, 2024 pm 04:54 PM

HTML 輸入佔位符指南。在這裡,我們討論 HTML 輸入佔位符的範例以及程式碼和輸出。

HTML 有序列表 HTML 有序列表 Sep 04, 2024 pm 04:43 PM

HTML 有序列表指南。在這裡我們也分別討論了 HTML 有序列表和類型的介紹以及它們的範例

HTML onclick 按鈕 HTML onclick 按鈕 Sep 04, 2024 pm 04:49 PM

HTML onclick 按鈕指南。這裡我們分別討論它們的介紹、工作原理、範例以及各個事件中的onclick事件。

在 HTML 中移動文字 在 HTML 中移動文字 Sep 04, 2024 pm 04:45 PM

HTML 中的文字移動指南。在這裡我們討論一下marquee標籤如何使用語法和實作範例。

See all articles