溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ES6中數(shù)組新增的方法有哪些

發(fā)布時間:2022-03-29 13:45:07 來源:億速云 閱讀:253 作者:小新 欄目:開發(fā)技術

小編給大家分享一下ES6中數(shù)組新增的方法有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

在ES6之前,創(chuàng)建數(shù)組的方式有2種:

一: 通過數(shù)組字面量

let array = [1,2,3];
console.log(array);//[1,2,3]

二: 通過new Array()創(chuàng)建數(shù)組

let array = new Array(1, 2, 3);
console.log(array); //[1,2,3]

Array.find((item,indexArr,arr)=>{}) 掌握

找出第一個符合條件的數(shù)組成員。

它的參數(shù)是一個回調(diào)函數(shù),對所有數(shù)組成員依次執(zhí)行該回調(diào)函數(shù)。

直到找出第一個返回值為true的成員,然后返回該成員。

如果沒有符合條件的成員,則返回undefined。

-- 找出第一個大于15的數(shù)字
let arr = [10, 20, 30]
let firstItem = arr.find((item, index, Arr) => {
    return item > 15
})
console.log('firstItem==>', firstItem); //輸出20

-- 找出第一個大于19的數(shù)字的這一項的值
let arr = [{
    age: 10
  }, {
    age: 20
  }, {
    age: 30
  }]
let firstItem = arr.find((item, index, Arr) => {
    return item.age > 19
})
console.log('firstItem==>', firstItem); //輸出{age: 20}

Array.findIndex((item, index, Arr) => {}) 掌握

數(shù)組實例的 findIndex 方法的用法與find方法非常類似,

返回第一個符合條件的數(shù)組成員的位置,如果所有成員都不符合條件,則返回-1。

let arr = [{
    age: 10
}, {
    age: 20
}, {
    age: 30
}]
let a = arr.findIndex((item, index, Arr) => {
    return item.age > 15
})
let b = arr.findIndex((item, index, Arr) => {
    return item.age > 45
})
console.log('a==>', a); //輸出1
console.log('b==>', b); //輸出-1


//查找數(shù)組的某一項是否有某個值
//返回第一個符合條件的數(shù)組成員的位置
const arr = [{
    id: 001
}, {
    id: 002
}, {
    id: 003
}];
let index = arr.findIndex(item => {
    return item.id == '004'
})
console.log(index);

Array.flat()用于拉平嵌套的數(shù)組[推薦-超級好用]

數(shù)組的成員有時還是數(shù)組,Array.flat()用于將嵌套的數(shù)組“拉平”,變成一維的數(shù)組。

該方法返回一個新數(shù)組,對原數(shù)據(jù)沒有影響。
[1, 2, [3, 4]].flat() 讀音【fu la t】

flat()默認只會“拉平”一層,如果想要“拉平”多層的嵌套數(shù)組。
可以將flat()方法的參數(shù)寫成一個整數(shù),表示想要拉平的層數(shù),默認為1。

[1, 2, [3, [4, 5]]].flat()
上面代碼中,表示想要拉平的層數(shù),默認為1
// [1, 2, 3, [4, 5]]

[1, 2, [3, [4, 5]]].flat(2)
上面代碼中,flat()的參數(shù)為2,表示要“拉平”兩層的嵌套數(shù)組。
// [1, 2, 3, 4, 5]

如果不管有多少層嵌套,都要轉(zhuǎn)成一維數(shù)組,可以用Infinity關鍵字作為參數(shù)。
[1, [2, [3]]].flat(Infinity) 
// [1, 2, 3]

如果原數(shù)組有空位,flat()方法會跳過空位。
[1, 2, , 4, 5].flat()
// [1, 2, 4, 5]

Array.at()返回對應下標的值[超級好用]

我們都知道JavaScript不支持數(shù)組索引值為負索引。 

那么想要表示數(shù)組的最后一個成員,不能寫成arr[-1],只能使用arr[arr.length - 1]。

為了解決負索引這個問題,es6中為數(shù)組實例增加了at()方法,接受一個整數(shù)作為參數(shù)。

返回對應位置的成員,支持負索引。

這個方法不僅可用于數(shù)組, 也可用于字符串和類型數(shù)組( TypedArray)。

如果參數(shù)位置超出了數(shù)組范圍,at()返回undefined。

const arr = [100, 120, 18, 130, 4];
console.log(arr.at(1)) //120
console.log(arr.at(-1)) //4
console.log(arr.at(-5)) //100
console.log(arr.at(-6)) //undefined

Array.from() [掌握]

一個類似數(shù)組的對象,Array.from將它轉(zhuǎn)為真正的數(shù)組。

需要注意的是:這個類似數(shù)組的對象必須要有l(wèi)ength屬性才可以,轉(zhuǎn)為數(shù)組。

否者將會轉(zhuǎn)為為一個空數(shù)組

let arrayLike = {
  '0': 'a',
  '1': 'b',
  '2': 'c',
  length: 3
};

// ES5的寫法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']

// ES6的寫法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']

當沒有類似數(shù)組的對象沒有l(wèi)ength屬性
let arrayLike = {
  '0': 'a',
  '1': 'b',
  '2': 'c',
};
//此時返回的是一個空數(shù)組
let arr2 = Array.from(arrayLike); // []

Array.of() 了解

Array.of()方法用于將【一組數(shù)值】轉(zhuǎn)換為數(shù)組.

簡單的使用:

const a = Array.of(10, 20, 26, 38);
console.log(a); // [10, 20, 26, 38]

const b = Array.of(1).length;
console.log(b);         // 1

Array.of()可以用以下的代碼模擬實現(xiàn):
function ArrayOf() {
  return [].slice.call(arguments);
}

Array.includes的使用

Array.prototype.includes方法返回一個布爾值,表示某個數(shù)組是否包含給定的值。

與字符串的includes方法類似。ES2016 引入了該方法。

簡單的使用方法

const arr = [100, 200, 300];
console.log(arr.includes('100')) //false
console.log(arr.includes(100)) //true

 沒有該方法之前,我們使用數(shù)組的indexOf方法,檢查是否包含某個值。

if (arr.indexOf(el) !== -1) {
  // 有這個值
}
indexOf方法有兩個缺點,一是不夠語義化,它的含義是找到參數(shù)值的第一個出現(xiàn)位置,
所以要去比較是否不等于-1,表達起來不夠直觀。
二是,它內(nèi)部使用嚴格相等運算符(===)進行判斷,這會導致對NaN的誤判。
[NaN].indexOf(NaN) // -1

includes使用的是不一樣的判斷算法,所以沒有這個問題。
[NaN].includes(NaN)
// true

擴展運算符 (...)

擴展運算符是三個點(...),

將一個數(shù)組轉(zhuǎn)為用逗號分隔的參數(shù)序列。

console.log(...[1, 2, 3])
// 1 2 3

console.log(1, ...[2, 3, 4], 5)
// 1 2 3 4 5

[...document.querySelectorAll('div')]
// [<div>, <div>, <div>]
let arr1=[11,22,];
let  arr2=["aa","bb"];
//  es5的合并
let arr=arr1.concat(arr2);
console.log(arr) // [11, 22, "aa", "bb"]

//es6
let newarr=[...arr1,...arr2]
console.log(newarr) // [11, 22, 33, 55, "aa", "bb", "cc", "dd"]
// 函數(shù)內(nèi)部有一個對象,arguments可以獲取到實參,但是一個偽數(shù)組
//Array[餓 rei]
function sun(){
  console.log(arguments) 
  //Arguments(8) [1, 2, 3, 4, 5, 6, 7, 9, callee: ?, Symbol(Symbol.iterator): ?]  他是一個偽數(shù)組
}
sun(1,2,3,4,5,6,7,9);


// 如何將函數(shù)內(nèi)部的偽數(shù)組變?yōu)檎鎸嵉臄?shù)組 方法1
function sun(){
  let ags=Array.prototype.slice.call(arguments);
  ags.push(150);
  console.log(ags); //[1, 2, 3, 4, 5, 6, 7, 9, 150]
}
sun(1,2,3,4,5,6,7,9);


// 如何將函數(shù)內(nèi)部的偽數(shù)組變?yōu)檎鎸嵉臄?shù)組 方法2
function sun(){
  let ags=[...arguments];//將偽數(shù)組百年未真實的數(shù)組
  ags.push(150);
  console.log(ags); //[1, 2, 3, 4, 5, 6, 7, 9, 150]
}
sun(1,2,3,4,5,6,7,9);

//  總結(jié)擴展運算符是...   [...變?yōu)檎鎸崝?shù)組的對象]

數(shù)組的空位

數(shù)組的空位指的是,數(shù)組的某一個位置沒有任何值.

比如Array()構造函數(shù)返回的數(shù)組都是空位。

let arr = new Array(3)
console.log(arr); // [, , ,] 谷歌瀏覽器中會有出現(xiàn)  [空屬性 × 3]

 上面代碼中,Array(3)返回一個具有 3 個空位的數(shù)組。

forEach(), filter(), reduce(), every() 和some()都會跳過空位。
map()會跳過空位,但會保留這個值
join()和toString()會將空位視為undefined,而undefined和null會被處理成空字符串。

ps:ES6 則是明確將空位轉(zhuǎn)為undefined。
let arr = new Array(3)
console.log(arr[0] === undefined); //true

ES5 對空位的處理,已經(jīng)很不一致了,大多數(shù)情況下會忽略空位。 

ps:ES6 則是明確將空位轉(zhuǎn)為undefined。
Array.from()方法會將數(shù)組的空位,轉(zhuǎn)為undefined,也就是說,這個方法不會忽略空位。
Array.from(['a',,'b'])
// [ "a", undefined, "b" ]

擴展運算符(...)也會將空位轉(zhuǎn)為undefined。
[...['a',,'b']]
// [ "a", undefined, "b" ]

new Array(3).fill('a') // ["a","a","a"]

for...of循環(huán)也會遍歷空位。
let arr = [, ,];
for (let i of arr) {
  console.log(1);
}
// 1
// 1
上面代碼中,數(shù)組arr有兩個空位,for...of并沒有忽略它們。
如果改成map()方法遍歷,空位是會跳過的

以上是“ES6中數(shù)組新增的方法有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

es6
AI