ECMAScript 之 Array Destructuring

栏目: JavaScript · 发布时间: 6年前

内容简介:ECMAScript 2015 提供了很有創意的 Array Destructuring,原本需要好幾行才能完成的 code,只需要一行就能解決。ECMAScript 2015

ECMAScript 2015 提供了很有創意的 Array Destructuring,原本需要好幾行才能完成的 code,只需要一行就能解決。

Version

ECMAScript 2015

Basic

const data = [1, 2, 3];

const a = data[0];
const b = data[1];
const c = data[2];

console.log(a, b, c);

data array 有 3 個 element,想分別指定到 abc 變數,ECMAScript 5 寫法必須要 3 行。

const data = [1, 2, 3];

const [a, b, c] = data;

console.log(a, b, c);

ECMAScript 2015 將 abc 直接寫在 [] 內, data array 會依照順序直接分解到變數,只需 1 行。

ECMAScript 之 Array Destructuring

Swapping Variable

let a = 1;
let b = 2;

let temp = a;
a = b;
b = temp;

console.log(a);
console.log(b);

若要兩個變數內容交換,在 ECMAScript 5 會另外建立 temp 暫存變數,需要 3 行。

let a = 1;
let b = 2;

[b, a] = [a, b];

console.log(a);
console.log(b);

ECMAScript 2015 將變數寫在 [] 直接交換,只要 1 行,可讀性非常高。

ECMAScript 之 Array Destructuring

Cloning Arra

const data0 = [1, 2, 3];
const data1 = data0;

console.log(data1);
console.log(data0 === data1);

若要複製 array,直覺會使用 = ,但 array 並非 primitive,而是 object,因此只是將 reference 加以複製,所以 data0data1 仍然指向同一個 [1, 2, 3] array,這不是真的複製 array。

ECMAScript 之 Array Destructuring

const data0 = [1, 2, 3];
const data1 = data0.slice();

console.log(data1);
console.log(data0 === data1);

ECMAScript 5 可使用 Array.prototype.slice() 將 array 加以複製, slice() 是真的回傳一個新的 array,而非指向同一個 array。

ECMAScript 之 Array Destructuring

const data0 = [1, 2, 3];
const data1 = data0.concat();

console.log(data1);
console.log(data0 === data1);

ECMAScript 5 也可以使用 Array.prototype.concat() 複製一個新 array,與 slice() 結果相同。

ECMAScript 之 Array Destructuring

const data0 = [1, 2, 3];
const [...data1] = data0;

console.log(data1);
console.log(data0 === data1);

ECMAScript 2015 則有新的寫法,Array Destructuring 配合 ... Spread Operator,其結果等同於 ECMAScript 5 的 slice()concat()

ECMAScript 之 Array Destructuring

Function Array Parameter

const data = [1, 2, 3];

const func = function(args) {
  const a = args[0];
  const b = args[1];
  const c = args[2];

  console.log(a, b, c);
};

func(data);

若 parameter 為 array,在 ECMAScript 5 會使用 array index 一一的指定給變數,需要 3 行。

ECMAScript 之 Array Destructuring

const data = [1, 2, 3];

const func = ([a, b, c]) => console.log(a, b, c);

func(data);

在 ECMAScript 2015 可在 parameter 使用 Array Destructuring,直接將 array parameter 分解成變數。

雖然只是一個 array,但若使用 Arrow Function 時,仍須加上 () 將 array 刮起來。

ECMAScript 之 Array Destructuring

const data = [1, 2, 3];

const func = ([a, b, c, d = 4]) => console.log(a, b, c, d);

func(data);

若想提供 default value 也行,在 = 之後提供 default value 即可。

ECMAScript 之 Array Destructuring

const data = ['RGB', [255, 0, 255]];

const func = function(args) {
  const name = args[0];
  const red = args[1][0];
  const green = args[1][1];
  const blue = args[1][2];

  console.log(name, red, green, blue);

};

func(data);

若 parameter 是 nested array,在 ECMAScript 5 必須一一分解變數,需要 4 行。

ECMAScript 之 Array Destructuring

const data = ['RGB', [255, 0, 255]];

const func = ([name, [red, green, blue]]) => console.log(name, red, green, blue);

func(data);

ECMAScript 2015 也可直接分解 nested array。

ECMAScript 之 Array Destructuring

Function Return Array

const func = function() {
  return [1, 2, 3];
};

const result = func();
const a = result[0];
const b = result[1];
const c = result[2];

console.log(a, b, c);

若要讓 function 回傳多值,在 ECMAScript 5 正規解法就是回傳 array,呼叫端接到 array 後,再使用 array index 一一指定給變數,需要 3 行。

ECMAScript 之 Array Destructuring

const func = () => [1, 2, 3];

const [a, b, c] = func();

console.log(a, b, c);

在 ECMAScript 2015 可使用 Array Destructuring 接收 function 回傳的 array,會自動分解成變數。

ECMAScript 之 Array Destructuring

const func = () => [1, 2, 3];

const [a, , c] = func();

console.log(a, c);

若並不想分解 function 所傳回的所有 array,可以在 ,, 之間空著,會自行忽略分解之。

ECMAScript 之 Array Destructuring

const func = () => [1, 2, 3];

const [a, ...c] = func();

console.log(a, c);

若 function 回傳的 array,想部分也分解成 array,可搭配 ... Spread Operator。

但這種寫法必須寫在 Array Destructuring 的最後才行

ECMAScript 之 Array Destructuring

Conclusion

  • Array Destructuring 的基本精神就是 一個蘿蔔一個坑 ,ECMAScript 2015 會自動將 array 的 element 分解到變數
  • Swapping Variable 算是 Array Destructuring 很巧妙的應用
  • Array Destructuring 配合 Spread Operator,可以取代原本 slice()concat() 才能複製 array
  • Array Destructuring 配合 function parameter 特別好用,可以直接在 parameter list 中就分解 parameter,還可搭配 default value
  • Array Destructuring 可將 function 回傳的 array 直接分解到變數

Reference

MDN , Destructuring assignment

Glad Chinda , ES6 Destructuring: The Complete Guide


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人工智能的未来

人工智能的未来

Jeff Hawkins、Sandra Blakeslee / 贺俊杰、李若子、杨倩 / 陕西科学技术出版社 / 2006.1 / 18.5

陕西科技出版社最新引进美国图书《人工智能的未来》(On Intelligence)一书,是由杰夫•霍金斯,一位在硅谷极其成功、受人尊敬的计算机工程师、企业家与桑德拉•布拉克斯莉,《纽约日报》的栏目作家共同撰写。本书对人类大脑皮层所具有的知觉、认识、行为和智能功能新理论提出了新的理论构想。这一理论的独到之处在于对大脑皮层的现行认识提出了新的观点,对大脑的工作原理,即霍金斯称之为“真正智能”而非计算机......一起来看看 《人工智能的未来》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具