1. 程式人生 > 程式設計 >JS Array.from()將偽陣列轉換成陣列的方法示例

JS Array.from()將偽陣列轉換成陣列的方法示例

Array.from 方法用於將兩類物件轉換為真正的陣列:

1、類似陣列的物件,可以理解為“偽陣列”

2、可遍歷物件(比如字串)

什麼是偽陣列?

偽陣列都有一個基本的特點:必須有 length 屬性。

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

像上面的 arrayLike 物件,有 length 屬性,key 也是有序序列。

所以可以遍歷,也可以查詢長度。但卻不能呼叫陣列的方法。比如 push、pop 等方法。

在 ES6 之前,還有一個常見的偽陣列:arguments。

arguments 看上去也很像一個數組,但它沒有陣列的方法。

比如 arguments.push(1) ,這樣做一定會報錯。

ES5 的做法

在 ES6 問世之前,開發者通常需要用以下的方法把偽陣列轉換成陣列。

方法1:遍歷
// 通過 makeArray 方法,把陣列轉成偽陣列
function makeArray(arrayLike) {
 let result = [];
 for (let i = 0,len = arrayLike.length; i < len; i++) {
  result.push(arrayLike[i]);
 }
 return result;
}

function doSomething () {
 let args = makeArray(arguments);
 console.log(args);
}
doSomething(1,2,3);

// 輸出: [1,3]

這個方法雖然有效,但要多寫很多程式碼。

方法2:Array.prototype.slice.call

function doSomething () {
 let args = Array.prototype.slice.call(arguments);
 console.log(args);
}
doSomething(1,3]

這個方法的功能和 方法1 是一樣的,雖然程式碼量減少了,但不能很直觀的讓其他開發者覺得這是在轉換。

ES6的做法

直到 ES6 提供了 Array.from 方法完美解決以上問題。

function doSomething () {
 let args = Array.from(arguments);
 console.log(args);
}

doSomething('一','二','三');

// 輸出: ['一','三']

Array.from 的主要作用就是把偽陣列和可遍歷物件轉換成陣列的。

說“主要作用”的原因是因為 Array.from 還提供了2個引數可傳。這樣可以延伸很多種小玩法。

Array.from 的第二個引數是一個函式,類似 map遍歷 方法。用來遍歷的。

Array.from 的第三個引數接受一個 this 物件,用來改變 this 指向。

第三個引數的用法(不常用)

let helper = {
 diff: 1,add (value) {
  return value + this.diff; // 注意這裡有個 this
 }
};

function translate () {
 return Array.from(arguments,helper.add,helper);
}

let numbers = translate(1,3);

console.log(numbers); // 2,3,4

其他玩法

建立長度為5的陣列,且初始化陣列每個元素都是1

let array = Array.from({length: 5},() => 1)
console.log(array)

// 輸出: [1,1,1]

第二個引數的作用和 map遍歷 差不多的,所以 map遍歷 有什麼玩法,這裡也可以做相同的功能。就不多贅述了。

把字串轉成陣列

let msg = 'hello';
let msgArr = Array.from(msg);
console.log(msgArr);
// 輸出: ["h","e","l","o"]

最後一個問題:如果傳一個真正的陣列給 Array.from 會返回什麼結果?

答案是:會返回一個一模一樣的陣列。

到此這篇關於JS Array.from()將偽陣列轉換成陣列的方法示例的文章就介紹到這了,更多相關JS Array.from偽陣列轉換成陣列內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!