es6新增陣列方法簡便了哪些操作?

一個搬磚工發表於2019-05-08

什麼是es6?

在這裡不過多闡述,我也是跟著阮一峰大佬的《es6入門》來學習的,es6新增了很多的方法、屬性,讓我們在編碼中得到了很高的提升,在這裡只對array這塊進行闡述,其他的就過不多介紹了。

言歸正傳,在專案中,經常會遇到處理資料,篩選資料的要求,我們更多的會藉助於for迴圈來完成,比如:陣列去重,傳統方法如下(以下所有例項只列舉一種)

let a = [1,2,2,3,3,4,5];
let b = [a[0]];
for(let i = 0; i < a.length; i++){
    let flag = false;
    for(let j = 0; j < b.length; j++){
        if( a[i] === b[j] ){
            flag = true;
            break;
        }
    }
    if( !flag ){
        b.push(a[i])
    }
}
console.log(b) // [1,2,3,4,5]
複製程式碼

上面的是es6之前的處理方法,可以解決問題,但程式碼量可著實不少啊!在es6中,只需要一行程式碼就可以搞定!

Array.from && newSet()

let a = [1,2,2,3,3,4,5];
let b = Array.from(new Set(a))
console.log(b) // [1,2,3,4,5]
複製程式碼

是不是及其簡單!其中 new Set()會把重複的資料過濾到,得到一個類陣列的物件,Array.from()可以把類陣列的物件轉換為真正的陣列物件,有興趣的同學可以對這兩個屬性進行更加深入的瞭解。

陣列過濾

在我們拿到後端資料的時候,可能會對資料進行一些篩選、過濾,傳統的做法如下

// 取出陣列中name為kele的陣列集合
let a = [
    {
        name: 'kele',
        title: '可口可樂'
    },
    {
        name: 'kele',
        title: '芬達'
    },
    {
        name: 'wlg',
        title: '王老吉'
    }
]

let b = [];

for(let i = 0; i < a.length; i++){
    if( a[i].name === 'kele' ){
        b.push(a[i])
    }
}

console.log(b) //[{name: 'kele', title: '可口可樂'},{name: 'kele', title: '芬達'}]
複製程式碼

es6中的處理方法如下

Array.filter(callback)

let a = [
    {
        name: 'kele',
        title: '可口可樂'
    },
    {
        name: 'kele',
        title: '芬達'
    },
    {
        name: 'wlg',
        title: '王老吉'
    }
]

let b = a.filter(item => item.name === 'kele');

console.log(b) //[{name: 'kele', title: '可口可樂'},{name: 'kele', title: '芬達'}]
複製程式碼

同樣的,Array.filter()讓我們擺脫了for迴圈,程式碼看起來更加的清爽!

Array.every(callback)

這個方法主要是判斷陣列中所有的元素都符合條件時,返回true

let a = [1,2,3,4,5];
let b = a.every(item => item > 2);
console.log(b) // false
複製程式碼

Array.some(callback)

這個方法和上一個略有區別,這個方法主要判斷陣列中有一個元素符合條件,就返回true

let a = [1,2,3,4,5];
let b = a.some(item => item > 2);
console.log(b) // true
複製程式碼

Array.find(callback)

這個方法是返回陣列中符合條件的第一個元素,否則就返回undefined

let a = [1,2,3,4,5];
let b = a.find(item => item > 2);
console.log(b) // 3
複製程式碼

Array.findIndex(callback)

這個方法是返回陣列中符合條件的第一個元素的索引值,否則就返回-1

let a = [1,2,3,4,5];
let b = a.findIndex(item => item > 2);
console.log(b) // 2  符合條件的為元素3 它的索引為2
複製程式碼

Array.includes(item, finIndex)

這個方法是判斷陣列中是否包含有指定的值,包含就返回true,否則就是false,它接受兩個引數,第一個為搜尋的值(必填),第二個為搜尋開始的位置(選填,預設從0開始)

let a = [1,2,3,4,5];
let b = a.includes(2);
console.log(b) // true
複製程式碼

Array.map(callback)

這個方法是返回一個根據你callback函式中的條件,返回一個全新的陣列

let a = [1,2,3,4,5];
let b = a.map(item => item * 2);
console.log(b) // [2,4,6,8,10]
複製程式碼

Array.reduce(callback)

這個方法是根據callback中的條件對陣列中的每個元素都進行類加的操作,返回一個全新的值,下面做兩個不同的例子,便於理解

/** 第一種 **/
let a = [1,2,3];
let b = a.reduce((i, j) => {
  return i + j;
}, 0);
console.log(b) // 6
/** 第二種 **/
let a = [1,2,3];
let b = a.reduce((i,j) => {
	i.push(j)
	return i
},[0])
console.log(b) // [0,1,2,3]
複製程式碼

...擴充套件運算子

這個可以很方便的幫我們實現合併兩個陣列

let a = [1,2,3];
let b = [4,5,6];
let c = [...a,...b];
console.log(c) // [1,2,3,4,5,6];
複製程式碼

小結:基本上新增的一些方法用到的就是這些,一些老的方法例如pushshiftsort等等就不一一列舉了。

相關文章