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 迴圈 ...