需要知道的JS數組之Array.from
相關學習推薦:javascript影片教學
前言
從去年發現字串的replace方法有很多神奇用法的時候,就想做這個系列,但是一直沒空,也沒有想到很好的名字,就擱置了。上週五刷題的時候看評論有個解決方法是用Array.from一行解決,而且效率還挺高的。於是啃了一下文檔和博客,搞清楚了之後就想正好可以開始這個系列了。而且數組是我們開發中最常用的資料結構之一,作為產生數組的方法之一,以from開始也蠻意思。系列名字就先湊合這麼叫吧。
- 基礎語法
定義:from() 方法用於透過擁有length 屬性的物件或可迭代的物件來傳回一個數組。
語法:Array.from(object, mapFunction, thisValue)
參數 | 描述 |
object | 必需,要轉換為陣列的物件。 |
- 可選,陣列中每個元素要呼叫的函數。
thisValue
可選,映射函數(mapFunction)中的 this 物件。
範例用法
#1. 將類別數組轉換為陣列
Array.from('hello') //["h", "e", "l", "l", "o"] Array.from(new Set(['name','age'])) //["name", "age"] Array.from({name:'lgc',age:25}) //[] let map=new Map() map.set('name','lgc') map.set('age',25) Array.from(map) //[["name", "lgc"],["age", 25]] function test(){ console.log(Array.from(arguments)) } test(1,2,3) //[1, 2, 3]复制代码
2. 陣列深層拷貝(一行程式碼)
function clone(arr){ return Array.isArray(arr) ? Array.from(arr, clone):arr } let arrayA=[[1,2],[3,4]] let arrayB=clone(arrayA) arrayA===arrayB //false arrayA[0]===arrayB[0] //false复制代码
3. 陣列去重
function unique(arr){ return Array.from(new Set(arr)) }复制代码
4. from的其他用法
再看一次from定義:from() 方法用於透過擁有length
屬性的物件或可迭代的物件來傳回一個陣列。擁有length就行?試試看Array.from({length:2},(val,index)=>index) //[0,1]复制代码
可以,那他有什麼用呢?第一,像上面程式碼,可以很方便產生在一定範圍,有一定規則的陣列
Array.from({length:3},(val,index)=>index*10) //[0,10,20]复制代码
第二,陣列的初始化。例如你想產生指定長度的物件數組。第一反應是什麼? fill嗎?
let testArr=Array(3).fill({}) testArr[0]===testArr[1] //true复制代码
let testArrb=Array.from({length:3},()=>({})) testArrb[0]===testArrb[1] //false复制代码
5. from的進階用法
上面的內容其實層層遞進下來都是為了更好的理解下面的解題思路。 LeetCode第867題:給定一個矩陣A, 傳回 A
的轉置矩陣。矩陣的轉置是指將矩陣的主對角線翻轉,交換矩陣的行索引與列索引。 範例1: 輸入:[[1,2,3],[4,5,6],[7,8,9]] 輸出:[[1,4,7],[2, 5,8],[3,6,9]] 範例2: 輸入:[[1,2,3],[4,5,6]] 輸出:[[1,4],[2,5], [3,6]]
當時第一個反應這就不是索引互換嗎?賊簡單。於是寫瞭如下程式碼
var transpose = function(A) { let x=A.length let y=A[0].length for(let i=0;i<x;i++){ for(let j=0;j<y;j++){ if(j-i>0){ [A[i][j],A[j][i]]=[A[j][i],A[i][j]] } } } return A };复制代码
var transpose = function(A) { return Array.from({length:A[0].length},(_v,i)=>A.map(v=>v[i]))};复制代码
以上是需要知道的JS數組之Array.from的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

方法:1、用shift()刪除第一個元素,語法「陣列.shift()」;2、用pop()刪除最後一個元素,語法「陣列.pop()」;3、用splice()刪除任意位置的元素,語法「數組.splice(位置,個數)」;4、用length刪除尾部的N個元素,語法「數組.length=原數組長度-N」;5、直接賦予空數組「[ ]」來清空元素;6、用delete刪除指定下標的一個元素。

3種轉換方法:1、使用split(),可將給定字串拆分為字串數組,語法「str.split(分隔符號,數組最大長度)」;2、利用擴展運算子「... ”,可迭代字串對象,將其轉為字元數組,語法“[...str]”;3、使用Array.from(),可將字串轉為數組,語法“Array.from(str) 」。

js數組可以轉換成php數組,其操作方法為:1、建立php範例檔;2、使用語法「JSON.stringify()」將js數組轉換為JSON格式的字串;3、使用語法「json_decode() 」將JSON格式字串轉為PHP數組,此處新增了參數true,表示將JSON格式字串轉換成PHP關聯數組。

在 JS 中取得數組長度非常簡單,每個數組都有一個 length 屬性,該屬性傳回數組的最大長度,即其值等於最大下標值加 1。由於數字下標必須小於 2^32-1,所以 length 屬性最大值等於 2^32-1。下面程式碼定義了一個空數組,然後為下標等於 100 的元素賦值,則 length 屬性傳回 101。因此,length 屬性不能體現陣列元素的實際個數。

js陣列刪除某個元素有4種方法,分別是:1、使用splice;2、使用filter;3、使用pop方法和shift;4、使用delete關鍵字。

JavaScript的Array.prototype.sort()方法用於對陣列的元素進行排序。此方法是就地排序,也就是說,它修改原始數組,而不是傳回一個新的排序數組。預設情況下,sort()方法會依照字串Unicode碼點值進行排序。這意味著它主要用於字串和數字的排序,而不是用於物件或其他複雜資料類型的排序。

js數組去重的方法有使用Set、使用indexOf、使用includes、使用filter和使用reduce。 1.使用Set,特點是集合中的元素不會重複;2、使用indexOf,可以傳回指定元素在數組中的第一個索引位置;3、使用includes,可以用來判斷一個元素是否已經存在於數組中;4、使用filter,可以用來篩選元素;5、使用reduce,可以將陣列中的元素壓縮等等。

JavaScript中,可利用length屬性來取得數組長度,語法「數組物件.length」;可使用reduce()或reduceRight()函數來求元素總和,語法「arr.reduce(function f(pre,curr){ return pre+cur})」或「arr.reduceRight(function f(pre,curr){return pre+cur})」。
