Array 的一些常用 API

unshift、push、shift、pop

  • 這4個方法都會改變原數組
  • unshift() 從前面添加元素,push() 從后面追加元素,返回數組長度
  • shift() 刪除第0個元素,pop() 刪除最后一個元素,返回被刪除的元素

slice

  • 不改變原數組
  • slice(m, n)返回原數組索引m(包含)到n(不包含)的元素數組。不傳參數默認全部截取,只傳一個參數,從該位置截取到末位。類似于String.prototype.substring
let arr = [1,2,3,4,5]
console.log(arr.slice()); // [ 1, 2, 3, 4, 5 ]
console.log(arr.slice(1)); // [ 2, 3, 4, 5 ]
console.log(arr.slice(2,4)); // [ 3, 4 ]
console.log(arr); // [1,2,3,4,5]

splice

  • 改變原數組。
  • splice(m,n,e1,e2,e3) 從索引m(包括)到n(不包括)的元素刪除數組,再在該位置處添加e1,e2,e3。若n傳入0,則只增加;若只傳m和n,則只刪除;若只傳m,則從m位置刪除到末位。放回刪除元素數組
let arr = [1,2,3,4,5];
console.log(arr.splice(2), arr); // [ 3, 4, 5 ] [ 1, 2 ]
console.log(arr.splice(0,1,2), arr); // [ 1 ] [ 2, 2, 3, 4, 5 ]

concat

  • 拼接,不改變原數組
let arr = [1,2,3], arr1 = [4];
console.log(arr.concat(arr1, 5), arr); // [ 1, 2, 3, 4, 5, ] [ 1, 2, 3 ]
console.log([...arr, ...arr1, 5]); // [ 1, 2, 3, 4, 5 ] (對象也可以這樣拼接,但重復的會覆蓋,相當與 Object.assign)

of 和 from

  • of()類似于new Array(),但后者如果傳入一個參數,則是設置數組長度。
  • from() 把偽數組轉換為真數組,類似于[].slice.call()(或者寫成Array.prototype.slice.call())
  • 偽數組有DOM集、arguments、{0: 'zero', 1: 'one', length: 2}
Array.of(1,2,3,4); // [ 1, 2, 3, 4 ]
Array.from({0: 'zero', 1: 'one', length: 2}); // [ 'zero', 'one' ]
判斷數組的方法有
  • xx instanceof Array
  • Array.isArray()
  • Object.prototype.toString.call() === '[object Array]'
這里補充一點判斷類型的技巧:
  • typeof操作符可以判斷出number、boolean、string、function和undefined,而不能判斷處具體的Object類型。

    • 判斷Array要使用Array.isArray(arr);
    • 判斷null請使用myVar === null;
    • 判斷某個全局變量是否存在用typeof window.myVar === 'undefined';
    • 函數內部判斷某個變量是否存在用typeof myVar === 'undefined'
  • 不必把任意類型轉換為boolean再判斷,因為可以直接寫if (myVar) {...},如果需要轉換可以用 !!myVar
  • 不要使用new Number()、new Boolean()、new String() 創建包裝對象;
  • 用parseInt()或parseFloat()來轉換任意類型為Number;用String()來轉換任意類型為String,或者直接調用某個對象的toString()方法;

indexOf 和 includes

  • indexOf() 返回索引,不存在就返回 -1。inclues()返回布爾值。
  • NaN 不能通過indexOf()判斷,它是通過“===”比較的。
arr = [1, '2', null, NaN];
arr.indexOf(NaN); // -1
arr.includes(NaN); // true

filter、find 和 findIndex

  • filter() 返回數組。find() 返回值,不存在就返回 undefined。 findIndex() 返回第一個匹配到的索引,不存在就返回 -1。
// let arr = [1, '2', null, NaN];
// arr.filter(item => typeof item === 'number'); // [1, NaN]
// arr.find(item => typeof item === 'number'); // 1
// arr.findIndex(item => typeof item === 'number'); // 0

some 和 every

  • 返回布爾值
  • some()用于檢測數組中的元素是否有滿足指定條件的;every()用于檢測數組中所有元素是否都符合指定條件。
  • 不對空數組進行檢測,不改變原數組
let arr = [Array(), [], {}, null]
let res1 = arr.some((item, index, arr) => {return Object.prototype.toString.call(item) === '[object Array]'
})
let res2 = arr.every((item, index, arr) => {return Object.prototype.toString.call(item) === '[object Array]'
})
console.log(res1,res2); // true false

map 和 forEach

  • map() 對數組中的每個元素進行處理,得到新的數組,不改變原數組
  • forEach() 相當于 for 循環,返回 undefined,不改變原數組
let res = [0,1,2,3,4].map((item, idx)=> item * idx); // [ 0, 1, 4, 9, 16 ]

reduce

  • reduce((accumulator, currentValue, currentIndex, array)=>{}, initValue)
  • 第一個參數是迭代器函數,函數的作用是對數組中從左到右的每一個元素進行處理。第二個可選參數是累加器的初始值。沒有時,累加器第一次的值為currentValue。
  • accumulator 累加器,即函數上一次調用的返回值。第一次的時候為 initialValue || arr[0]
  • currentValue 數組中函數正在處理的的值,第一次的時候是 initialValue || arr[1]
  • currentIndex 數組中函數正在處理的的索引
  • array 函數調用的數組
console.log([1,2,3].reduce((a,b,c,d)=>{console.log(a,b,c,d);return a+b; // 下一次的a}, 4)
); // 10
/* 4 1 0 [ 1, 2, 3 ]5 2 1 [ 1, 2, 3 ]7 3 2 [ 1, 2, 3 ] 
*/

當然累乘或者做其他業務也是可以的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281439.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281439.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281439.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ovum觀察:運營商通信PaaS發展趨勢強勁

近日在佛羅里達州奧蘭多市舉行的Genband公司Perspectives16會議上,一個首要議題是在通信領域應對OTT威脅。 這場會議的主旨側重于電信運營商和其他服務提供商如何應對日益嚴重的威脅,不過似乎這樣的討論有些晚了,因為許多大型運營商已經找到了…

WPF 托盤閃爍

WPF 托盤閃爍控件名:NotifyIcon作者:WPFDevelopersOrg - 弈虎、驚鏵原文鏈接: https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40。Visual Studio 2022。項目使用 MIT 開源許可協議。接著上一篇基礎托盤。新增如下…

電機與系統計算機仿真作業,北郵計算機仿真期末大作業.docx

文檔介紹:EvaluationWarning:ThedocumentwascreatedwithSpire..I瑋涼爰p電大摩《計算機仿真》MATLAB課程設計報告學院: 自動化學院 專業: 自動化專業 班級: 2010211411姓名: 韓思宇 學號: 10212006 2013年01月14日轉子繞線機控制系統綜合仿真摘要:轉子繞線機的控制系…

Software License Manager

slmgr -ilc lenovo.xrm-ms slmgr -ipk lenovo-lenovo-lenovo-lenovo-lenovo轉載于:https://www.cnblogs.com/cuthead/p/license.html

Sqlserver數據庫還原一直顯示“正在還原…”解決方法

今天在Sqlerver還原數據庫時一直就卡在那里提示“正在還原…”的狀態,此時無法操作數據庫,下面我來給大家介紹解決些問題的方法解決方法: 代碼如下復制代碼 RESTORE DATABASE demo FROM DISK D:/demo.bak WITH MOVE demo TO d:/demo.mdf, MOVE dem…

Information Retrieval 倒排索引 學習筆記

一,問題描述 在Shakespeare文集(有很多文檔Document)中,尋找哪個文檔包含了單詞“Brutus”和"Caesar",且不包含"Calpurnia"。這其實是一個查詢操作(Boolean Queries)。 在U…

計算機地址欄搜索不了網,我的電腦地址欄不見了怎么辦 地址欄不見了如何解決...

導語:小編對電腦是比較癡迷的,因此喜歡在自己的電腦上進行各種操作,也經常會碰到一些問題。今天要為大家介紹的是在我的電腦地址欄不見了之后怎么辦,熟悉電腦的朋友都能夠了解。在我的電腦主界面里面,有一個地址欄&…

實踐App內存優化:如何有序地做內存分析與優化

由于項目里之前線上版本出現過一定比例的OOM,雖然比例并不大,但是還是暴露了一定的問題,所以打算對我們App分為幾個步驟進行內存分析和優化,當然內存的優化是個長期的過程,不是一兩個版本的事,每個版本都需要收集線上內…

php OpenSSL 加解密

2018-1-6 17:10:19 星期六 1 $data 123456;2 $openssl_method AES-256-CBC;3 $openssl_iv_length openssl_cipher_iv_length($openssl_method);4 $openssl_iv openssl_random_pseudo_bytes($openssl_iv_length);5 $openssl_password openssl_random_pseudo_bytes(16);6 7 …

前端應該掌握的網絡知識(1)

1、客戶端:通過發送請求獲取服務器資源的web瀏覽器等。 2、TCP/IP協議族按層次分為:應用層、傳輸層、網絡層和數據鏈路層。 應用層決定了向用戶提供應用服務時通信的活動。比如:FTP(文本傳輸協議)和DNS(域名…

WinForm(十四)窗體滾動日志

在桌面程序里,一般日志記錄到文件里就可以了,但有的時間,也需要在窗體上動態滾動顯示,這時,就需要引入日志框架了。這里引入的依舊是NLog(在我的Mini API系統里,用的也是NLog)。首先…

xp計算機找不到音量調節,WinXP電腦沒聲音且小喇叭不見了如何解決?

有用戶在使用電腦聽音樂的時候,突然發現電腦沒有聲音了,本來以為只是被禁了音,想著調節音量即可解決問題。但是當他想要點開音量小喇叭的時候,發現桌面任務欄通知區域的小喇叭不見了,這該怎么辦呢?下面小編…

2018-2019-1 20165211 實驗四 外設驅動程序設計

2018-2019-1 20165211 實驗四 外設驅動程序設計 任務一 1.實驗要求 學習資源中全課中的“hqyj.嵌入式Linux應用程序開發標準教程.pdf”中的第十一章 提交康奈爾筆記的照片(可以多張) 2. 任務完成 任務二 1. 實驗要求 在Ubuntu完成資源中全課中的“hqyj.嵌…

《ASP.NET Core 6框架揭秘》實例演示[31]:路由高階用法

ASP.NET的路由是通過EndpointRoutingMiddleware和EndpointMiddleware這兩個中間件協作完成的,它們在ASP.NET平臺上具有舉足輕重的地位,MVC和gRPC框架,Dapr的Actor和發布訂閱編程模式都建立在路由系統之上。Minimal API更是將提升到了前所未有…

java中文亂碼解決之道(五)—–java是如何編碼解碼的

編碼&解碼 1:I/O操作 2:內存 3:數據庫 4:javaWeb 下面主要介紹前面兩種場景,數據庫部分只要設置正確編碼格式就不會有什么問題,javaWeb場景過多需要了解URL、get、POST的編碼,servlet的解碼…

java反射--Class類

面向對象的世界里,萬事萬物皆對象。 1)類是誰的對象呢? 類是對象,類是java.lang.Class類的實例對象。 2)這個對象如何表示呢? package com.reflect;public class ClassDemo1 {public static void main(Stri…

win10系統按esc會彈出計算機,win10系統版本2004控制面板多出ESC是什么原因?

如果我們的電腦在升級了win102004控制面板多出ESC什么情況方法一:“干凈啟動”,排除第三方軟體的影響1.停止非核心的程序運作(包括第三方殺毒、優化軟體)2.情況允許的話,卸載設備中的第三方殺毒、管家、優化軟件3.同時按【4.點擊【服務】>…

CentOS6/7 配置守護進程

CentOS6.xCentOS6中轉用Upstrat代替以前的init.d/rcX.d的線性啟動方式。一、相關命令通過initctl help可以查看相關命令[rootlocalhost ~]# initctl help Job commands:start Start job.stop Stop job.restart …

Vue源碼解析之數組變異

力有不逮的對象 眾所周知,在 Vue 中,直接修改對象屬性的值無法觸發響應式。當你直接修改了對象屬性的值,你會發現,只有數據改了,但是頁面內容并沒有改變。 這是什么原因? 原因在于: Vue 的響應式…

linux守護進程的編寫

linux監控一個進程進行 代碼如下: #!/bin/shcd /home/autoprocess/ autopgrep -f autoProcessNew.php | wc -l if [ "$auto" 0 ] then nohup php autoProcessNew.php & fi 監視autoProcessNew.php,使他一直監視轉載于:https://www.cnblogs.com/matengfei123/p/…