js陣列小記

2022-02-09 05:18:42 字數 3651 閱讀 4745

arr.splice(str) 方法可以說是處理陣列的瑞士軍刀。它可以做所有事情:新增,刪除和插入元素。

arr.splice(index[, deletecount, elem1, ..., elemn])

從 index 開始:刪除 deletecount 個元素並在當前位置插入 elem1, ..., elemn。最後返回已刪除元素的陣列。

arr.slice([start], [end])

它會返回乙個新陣列,將所有從索引 start 到 end(不包括 end)的陣列項複製到乙個新的陣列。start 和 end 都可以是負數,在這種情況下,從末尾計算索引。

alert( arr.slice(1, 3) ); // e,s(複製從位置 1 到位置 3 的元素)

alert( arr.slice(-2) ); // s,t(複製從位置 -2 到尾端的元素)

我們也可以不帶引數地呼叫它:arr.slice() 會建立乙個 arr 的副本。其通常用於獲取副本,以進行不影響原始陣列的進一步轉換。

arr.concat 建立乙個新陣列,其中包含來自於其他陣列和其他項的值。

arr.concat(arg1, arg2...)

它接受任意數量的引數 —— 陣列或值都可以。

結果是乙個包含來自於 arr,然後是 arg1,arg2 的元素的新陣列。

如果引數 argn 是乙個陣列,那麼其中的所有元素都會被複製。否則,將複製引數本身。

let arr = [1, 2];

// create an array from: arr and [3,4]

alert( arr.concat([3, 4]) ); // 1,2,3,4

// create an array from: arr and [3,4] and [5,6]

alert( arr.concat([3, 4], [5, 6]) ); // 1,2,3,4,5,6

// create an array from: arr and [3,4], then add values 5 and 6

alert( arr.concat([3, 4], 5, 6) ); // 1,2,3,4,5,6

arr.foreach 方法允許為陣列的每個元素都執行乙個函式。

arr.foreach(function(item, index, array) );
indexof/lastindexof 和 includes

let result = arr.find(function(item, index, array) );
如果它返回 true,則搜尋停止,並返回 item。如果沒有搜尋到,則返回 undefined。

let users = [

, ,

];let user = users.find(item => item.id == 1);

alert(user.name); // john

arr.findindex 方法(與 arr.find 方法)基本上是一樣的,但它返回找到元素的索引,而不是元素本身。並且在未找到任何內容時返回 -1。

find 方法搜尋的是使函式返回 true 的第乙個(單個)元素。

如果需要匹配的有很多,我們可以使用 arr.filter(fn)。

語法與 find 大致相同,但是 filter 返回的是所有匹配元素組成的陣列:

let results = arr.filter(function(item, index, array) );
arr.map 方法是最有用和經常使用的方法之一。

它對陣列的每個元素都呼叫函式,並返回結果陣列。

let result = arr.map(function(item, index, array) )
例如,在這裡我們將每個元素轉換為它的字串長度:

let lengths = ["bilbo", "gandalf", "nazgul"].map(item => item.length);

alert(lengths); // 5,7,6

arr.sort 方法對陣列進行 原位(in-place) 排序,更改元素的順序。(譯註:原位是指在此陣列內,而非生成乙個新陣列。)

比較陣列內數字大小

let arr = [ 1, 2, 15 ];

arr.sort((a,b)=>a-b);

alert(arr); // 1, 2, 15

arr.reverse 方法用於顛倒 arr 中元素的順序。

let arr = [1, 2, 3, 4, 5];

arr.reverse();

alert( arr ); // 5,4,3,2,1

str.split(delim) 方法可以做到。它通過給定的分隔符 delim 將字串分割成乙個陣列。

let str = "test";

alert( str.split('') ); // t,e,s,t

arr.join(glue) 與 split 相反。它會在它們之間建立一串由 glue 粘合的 arr 項。

let arr = ['bilbo', 'gandalf', 'nazgul'];

let str = arr.join(';'); // 使用分號 ; 將陣列粘合成字串

alert( str ); // bilbo;gandalf;nazgul

當我們需要遍歷乙個陣列時 —— 我們可以使用 foreach,for 或 for..of。

當我們需要遍歷並返回每個元素的資料時 —— 我們可以使用 map。

arr.reduce 方法和上面的種類差不多,但稍微複雜一點。它們用於根據陣列計算單個值。

let value = arr.reduce(function(accumulator, item, index, array) , [initial]);
該函式乙個接乙個地應用於所有陣列元素,並將其結果「搬運(carry on)」到下乙個呼叫。

引數:因此,第乙個引數本質上是累加器,用於儲存所有先前執行的組合結果。最後,它成為 reduce 的結果。

累加例子

let arr = [1, 2, 3, 4, 5];

let result = arr.reduce((sum, current) => sum + current);

alert(result); // 15

陣列是基於物件的,不構成單獨的語言型別。

所以 typeof 不能幫助從陣列中區分出普通物件:

但是陣列經常被使用,因此有一種特殊的方法用於判斷:array.isarray(value)。如果 value 是乙個陣列,則返回 true;否則返回 false。

alert(array.isarray({})); // false

alert(array.isarray()); // true

js語法小記

用js處理字串還是很方便的,幾點語法記錄一下,備查 var str tmp 31 34 56 79 ac a表示字串陣列 var a str tmp.split 轉換為十六進製制數值 var tmp1 parseint a 0 16 var tmp2 parseint a 1 16 數值轉換為asc...

字尾陣列小記

sa i 表示第 i 小的字尾對應原串的位置 rk i 表示第 i 個字尾的排名 x i 表示第 i 個字尾的第一關鍵字排名,即當前的 rk i y i 表示第 i 小的第二關鍵字對應的第幾個字尾 c i 是乙個計數陣列,用於基數排序用 考慮倍增,每次從 2 k 轉移到 2 可以發現每個 2 串可以...

JS 效能優化小記

js語法層面的效能優化 先看乙個2萬次的遍歷性能開銷圖 chrome 版本 83.0.4103.61 正式版本 64 位 發現了什麼?同樣是foreach 執行效率截然不同,所以不能簡單的對比 for for.of foreach 效能上的差異,理所當然的認為效能開銷所差無幾,建議使用for 迴圈 ...