ES6 數(shù)組給我們帶來哪些操作便利?

一、擴展運算符[1]
擴展運算符的表示法是:... (三個點),它可以將數(shù)組,字符串,函數(shù)返回值,有部署Iterator 接口的對象等轉(zhuǎn)化為對應(yīng)的參數(shù)序列。
擴展運算符的應(yīng)用:
1、合并數(shù)組

var arr1 = [1, 2];
var arr2 = [3];
var arr3 = [4, 5];
// ES5 數(shù)組合并寫法
arr1.concat(arr2, arr3); //  [1, 2, 3, 4, 5]
// ES6 數(shù)組合并寫法
[...arr1, ...arr2, ...arr3]; //  [1, 2, 3, 4, 5]

2、與解構(gòu)賦值結(jié)合使用

let [first, ...rest] = [1, 2, 3, 4, 5];
first; // 1
rest; //  [ 2, 3, 4, 5]

const [first, ...rest] = ["yuan"];
first; // "yuan"
rest; // []

const [one, ...another] = [];
one; // undefined
another; // []

這里注意,rest參數(shù)后面就不能在設(shè)置參數(shù)了。
3、函數(shù)返回值
在函數(shù)返回多個值時,如返回數(shù)組或?qū)ο?,使用擴展運算符可以解決:

let dateFields = [1970, 0, 1];  
let d = new Date(...dateFields);
d; // Thu Jan 01 1970 00:00:00 GMT+0800 (中國標(biāo)準時間)

let dateFields = readDateFields(database);
let d = new Date(...dateFields);

上面代碼是從數(shù)據(jù)庫里取出一段數(shù)據(jù),然后直接傳入構(gòu)造函數(shù)Date里。
4、字符串

[...'yuan']; // ["y", "u", "a", "n"]

5、具有Iterator 接口的對象
任何具有Iterator 接口的對象,如類數(shù)組、Set和Map數(shù)據(jù)結(jié)構(gòu)等,都可以通過擴展運算符轉(zhuǎn)化為真正的數(shù)組,那些沒有Iterator 接口的數(shù)據(jù)結(jié)構(gòu),是不能使用擴展運算符轉(zhuǎn)為數(shù)組的。

var nodeList = document.querySelectorAll('div');
var arrList = [...nodeList];

let map = new Map([
  ["animal", "yuan"],
  ["type", "monkey"]
]);
console.log([...map.entries()]); 
// ["animal", "yuan"]
// ["type", "monkey"]

二、數(shù)組方法擴展[2]
1、Array.from()
從一個類似數(shù)組或者可迭代對象中創(chuàng)建一個新的數(shù)組實例。
這里的類似數(shù)組指:擁有 length 屬性和若干索引屬性的任意對象。
可迭代對象指:可以獲取元素中的對象,如Map 和Set 等。
使用方式:Array.from(arrayLike, mapFn, thisArg);
三個參數(shù)代表如下:
arrayLike:要轉(zhuǎn)化成數(shù)組的目標(biāo)對象(類似數(shù)組或者可迭代對象);
mapFn:可選參數(shù),新數(shù)組中的每個元素都會調(diào)這個回調(diào)函數(shù),類似數(shù)組中的map 方法;
thisArg:可選參數(shù),執(zhí)行回調(diào)函數(shù) mapFn 的 this 對象。
代碼案例:

// 1、字符串轉(zhuǎn)數(shù)組
Array.from("yuan"); // ["y", "u", "a", "n"]

// 2、Set 對象轉(zhuǎn)數(shù)組
let s = new Set(["yuan", "monkey"]);
Array.from(s); // ["yuan", "monkey"]

// 3、Map 對象轉(zhuǎn)數(shù)組
let m = new Map([[1, 2], [2, 4], [4, 8]]);
Array.from(m); // [[1, 2], [2, 4], [4, 8]]

// 4、arguments 類數(shù)組對象轉(zhuǎn)數(shù)組
function arg() {
  return Array.from(arguments);
}
arg(2,3,4); // [2, 3, 4]

// 5、啟用第二個參數(shù)
let a = [1, 2, 3];
Array.from(a, x => x * x); // [1, 4, 9]

// 6、與length 的關(guān)系
Array.from({ length : 3}, (v, i) => i * i); //  [0, 1, 4]

2、Array.of()
定義:將一組值轉(zhuǎn)化為數(shù)組,這一組值的個數(shù)為任意個數(shù)。
用法:Array.of(el1, el2, ..., elN);
elN: 指任意個參數(shù);
與Array() 的區(qū)別:

Array.of(7);       // [7] 
Array.of(1, 2, 3); // [1, 2, 3]

Array(7);          // [ , , , , , , ]
Array(1, 2, 3);    // [1, 2, 3]

Array.of() 和 Array 構(gòu)造函數(shù)之間的區(qū)別在于處理整數(shù)參數(shù):Array.of(7) 創(chuàng)建一個具有單個元素 7 的數(shù)組,而 Array(7) 創(chuàng)建一個包含 7 個 undefined 元素的數(shù)組。
代碼案例:

Array.of(1);         // [1]
Array.of(1, 2, 3);   // [1, 2, 3]
Array.of(undefined); // [undefined]

三、數(shù)組實例擴展[3]
1、copyWithin():復(fù)制數(shù)組的一部分到同一數(shù)組的另一個位置,返回的是修改后的數(shù)組,不會修改數(shù)組的大小。
使用方式:arr.copyWithin(target, start, end);
target(必選):目標(biāo)索引,指從該位置開始替換數(shù)據(jù)。若為負數(shù),則從末尾開始算起。
start(可選):開始復(fù)制元素的起始位置,默認為0,若為負數(shù),則從末尾開始算起。
end(可選):開始復(fù)制元素的結(jié)束位置,默認為數(shù)組的長度,若為負數(shù),則從末尾開始算起。

[1, 2, 3, 4, 5].copyWithin(-2);
// [1, 2, 3, 1, 2]

[1, 2, 3, 4, 5].copyWithin(0, 3);
// [4, 5, 3, 4, 5]

[1, 2, 3, 4, 5].copyWithin(0, 3, 4);
// [4, 2, 3, 4, 5]

[1, 2, 3, 4, 5].copyWithin(-2, -3, -1);
// [1, 2, 3, 3, 4]

[].copyWithin.call({length: 5, 3: 1}, 0, 3);
// {0: 1, 3: 1, length: 5}

var i32a = new Int32Array([1, 2, 3, 4, 5]);
i32a.copyWithin(0, 2);
// Int32Array [3, 4, 5, 4, 5]

// 兼容寫法
[].copyWithin.call(new Int32Array([1, 2, 3, 4, 5]), 0, 3, 4);
// Int32Array [4, 2, 3, 4, 5]

2、find() 和 findIndex():找出第一個符合條件的數(shù)組成員。
使用方法:arr.find(callback[, thisArg])
calback:數(shù)組的每個元素都執(zhí)行這個回調(diào)函數(shù),且這個回調(diào)函數(shù)包含三個參數(shù),分別是:
element:當(dāng)前的值;
index:數(shù)組當(dāng)前元素的位置;
array:數(shù)組本身。
thisArg(可選):指定 callback 的 this。
代碼案例:

// 用對象的屬性查找數(shù)組中的對象
var inventory = [
    {name: 'apples', quantity: 2},
    {name: 'bananas', quantity: 0},
    {name: 'cherries', quantity: 5}
];

function findCherries(fruit) { 
    return fruit.name === 'cherries';
}
console.log(inventory.find(findCherries)); // { name: 'cherries', quantity: 5 }

// 尋找數(shù)組中的質(zhì)數(shù)
function isPrime(element, index, array) {
  var start = 2;
  while (start <= Math.sqrt(element)) {
    if (element % start++ < 1) {
      return false;
    }
  }
  return element > 1;
}

console.log([4, 6, 8, 12].find(isPrime)); // undefined, not found
console.log([4, 5, 8, 12].find(isPrime)); // 5

3、fill():填充數(shù)組
使用方法:arr.fill(value, start, end);
value:要填充的值;
start:填充的起始位置,填充不包括第一個位置,默認為0;
end:填充結(jié)束位置,填充包括最后一個位置,默認數(shù)組的長度。
代碼案例:

[1, 2, 3].fill(4)            // [4, 4, 4]
[1, 2, 3].fill(4, 1)         // [1, 4, 4]
[1, 2, 3].fill(4, 1, 2)      // [1, 4, 3]
[1, 2, 3, 4].fill(4, 1, 3)  // [1, 4, 4, 4]
[1, 2, 3].fill(4, 1, 1)      // [1, 2, 3]
[1, 2, 3].fill(4, -3, -2)    // [4, 2, 3]
[1, 2, 3].fill(4, NaN, NaN)  // [1, 2, 3]
Array(3).fill(4);            // [4, 4, 4]
[].fill.call({length: 3}, 4) // {0: 4, 1: 4, 2: 4, length: 3}

4、entries()、values()、keys():遍歷數(shù)組每個元素的鍵值對、值、鍵
代碼案例:

// entries
var arr = ["y", "u", "a", "n"];
var iterator = arr.entries();
for (let v of iterator) {
  console.log(v);
}
//  [0, "y"]
//  [1, "u"]
// [2, "a"]
// [3, "n"]

// values
var arr = ["y", "u", "a", "n"];
var iterator = arr.values();
for (let v of iterator) {
  console.log(v);
}
//  y
// u
// a
/ /n

// keys
var arr = ["y", "u", "a", "n"];
var iterator = arr.keys();
for (let v of iterator) {
  console.log(v);
}
// 0
// 1
// 2
// 3

5、includes():判斷數(shù)組是否包含某個特定的值,返回的是布爾值
使用方法:arr.includes(value, fromIndex)
value:需要查找的值
fromIndex:查找開始的位置,若為負值,查找開始的位置為數(shù)組的長度length + 這個負值fromIndex,默認為0。
代碼案例:

var arr = ["y", "u", "a", "n"];
arr.includes("y"); // true 
arr.includes("z"); // false

四、總結(jié)
1、掌握擴展運算符的使用。
2、掌握數(shù)組方法和數(shù)組實例方法的擴展。

戳我博客

章節(jié)目錄

1、ES6中啥是塊級作用域?運用在哪些地方?
2、ES6中使用解構(gòu)賦值能帶給我們什么?
3、ES6字符串?dāng)U展增加了哪些?
4、ES6對正則做了哪些擴展?
5、ES6數(shù)值多了哪些擴展?
6、ES6函數(shù)擴展(箭頭函數(shù))
7、ES6 數(shù)組給我們帶來哪些操作便利?
8、ES6 對象擴展
9、Symbol 數(shù)據(jù)類型在 ES6 中起什么作用?
10、Map 和 Set 兩數(shù)據(jù)結(jié)構(gòu)在ES6的作用
11、ES6 中的Proxy 和 Reflect 到底是什么鬼?
12、從 Promise 開始踏入異步操作之旅
13、ES6 迭代器(Iterator)和 for...of循環(huán)使用方法
14、ES6 異步進階第二步:Generator 函數(shù)
15、JavaScript 異步操作進階第三步:async 函數(shù)
16、ES6 構(gòu)造函數(shù)語法糖:class 類


  1. 一、擴展運算符 ?

  2. 二、數(shù)組方法擴展 ?

  3. 三、數(shù)組實例擴展 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,441評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,211評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,736評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,475評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,834評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,009評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,559評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,306評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,516評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,728評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,132評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,443評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,249評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,484評論 2 379

推薦閱讀更多精彩內(nèi)容

  • ES6數(shù)組擴展 1.Array.from() 定義:Array.from()用于將兩類對象轉(zhuǎn)換成真正的數(shù)組:類數(shù)組...
    lijaha閱讀 430評論 0 0
  • [JavaScript數(shù)組]一篇中介紹了ES6之前的數(shù)組方法。本篇介紹一下ES6里新增的數(shù)組方法。 keys,va...
    sponing閱讀 305評論 0 0
  • Javascript有很多數(shù)組的方法,有的人有W3C的API,還可以去MDN上去找,但是我覺得API上說的不全,M...
    頑皮的雪狐七七閱讀 4,171評論 0 6
  • 2017.12.31 星期日 晴 17年的最后一天,回顧這一年,幸福的,難忘的,感動的,要感謝的人和事...
    瑞瑞琪琪閱讀 127評論 0 0