介紹一些項(xiàng)目常用到的數(shù)組和字符串方法撵渡,這些方法方便我們靈活運(yùn)用請求的數(shù)據(jù)中的數(shù)組或者字符串融柬。
數(shù)組方法
- 字符串轉(zhuǎn)換為數(shù)組
-
split():
作為字符串方法,我們提供一個參數(shù)趋距,作為字符串分割的字符粒氧,并返回分隔符之間的字串,作為數(shù)組中的項(xiàng)节腐。(1)創(chuàng)建字符串
let myData = 'Manchester,London,liverpool,leeds'
(2)用逗號分隔:
let myArray = myData.split(','); console.log(myArray)
(3)可以使用
join()
方法進(jìn)行相反的操作let myNewString = myArray.join(',');
-
toString():
將數(shù)組轉(zhuǎn)換為字符串的另一種方法外盯,可以比join()
更簡單,因?yàn)樗恍枰粋€參數(shù)铜跑,但更有限制门怪,使用join()
可以指定不同的分隔符let dogNames = ["Rocket","Flash","Bella","Slugger"]; dogNames.toString(); //Rocket,Flash,Bella,Slugger
- 添加和刪除數(shù)組項(xiàng)
-
push()
需要添加一個或多個到數(shù)組末尾的元素時使用myArray.push('Cardiff');
-
pop()
從數(shù)組中刪除最后一個元素,直接使用myArray.pop();
unshift()锅纺、 shift()
從功能上與 push() 和 pop() 完全相同掷空,只是它們分別作用于數(shù)組的開始,而不是結(jié)尾囤锉。
- 其他
-
map():
創(chuàng)建一個新數(shù)組坦弟,其結(jié)果是該數(shù)組中的每個元素都調(diào)用一個提供的函數(shù)后返回的結(jié)果。map 不修改調(diào)用它的原數(shù)組本身官地。
map為同步函數(shù)酿傍,遍歷數(shù)組中每一項(xiàng)請求數(shù)據(jù)時,要注意使用var new_array = arr.map(function callback(currentValue[ index[, array]]) { }[, thisArg]) //舉個例子: 拿到請求數(shù)據(jù)data之后驱入,給content數(shù)組中的每一項(xiàng)添加key; const list = data.content.map(item =>({...item, key: uuidv1()}))
callback:生成新數(shù)組元素的函數(shù)赤炒,使用三個參數(shù):
currentValue:callback 數(shù)組中正在處理的當(dāng)前元素。
index可選:callback 數(shù)組中正在處理的當(dāng)前元素的索引亏较。
array可選:callback map 方法被調(diào)用的數(shù)組莺褒。
thisArg可選:執(zhí)行 callback 函數(shù)時使用的this 值。 -
every():
測試一個數(shù)組內(nèi)的所有元素是否都能通過某個指定函數(shù)的測試雪情。它返回一個布爾值遵岩。arr.every(callback[, thisArg])
例子:
function isBigEnough(element, index, array) { return element >= 10; } [12, 5, 8, 130, 44].every(isBigEnough); // false [12, 5, 8, 130, 44].every(x => x >= 10); //箭頭函數(shù) false
-
some()
測試是否至少有一個元素可以通過被提供的函數(shù)方法。該方法返回一個Boolean類型巡通。
依次執(zhí)行數(shù)組的每個元素尘执,如果有一個元素滿足條件,則返回true宴凉,剩余的元素不再會執(zhí)行檢測誊锭。
不會對空數(shù)組進(jìn)行檢測,不會改變原始數(shù)組弥锄。var ages = [3, 10, 18, 20] ages.some(item => item>18) //true
-
find()
返回數(shù)組中滿足提供的測試函數(shù)的第一個元素的值炉旷,之后的值不再進(jìn)行檢測签孔。沒有找到時返回 undefinedvar ages = [3, 10, 18, 20] ages.find(item => item>18) //20
-
findIndex()
返回數(shù)組中滿足提供的測試函數(shù)的第一個元素的值的下標(biāo),之后的值不再進(jìn)行檢測窘行。沒有找到時返回 -1var ages = [3, 10, 18, 20] ages.findIndex(item => item>30) //-1
-
filter()
創(chuàng)建一個新數(shù)組, 其包含通過所提供函數(shù)實(shí)現(xiàn)的測試的所有元素饥追。var newArray = arr.filter(callback(element[, index[, array]])[, thisArg]) const result = words.filter(word => word.length > 6);
-
sort()
數(shù)組自帶的排序方法,默認(rèn)情況下會將元素按照字符串進(jìn)行比較罐盔。
(1)當(dāng)元素為字符串時:
將元素從字符串的第一位開始比較但绕,第一位相同時比較后var arr = ["cb","a","g","cy"]; arr.sort(); console.log(arr); //["a","cb","cy","g"]
(2)當(dāng)元素為數(shù)字時:
默認(rèn)將數(shù)字元素當(dāng)做字符串比較,從第一位開始比較惶看,第一位相同時比較后var arr2 = [20,13,11,8,0,11]; arr2.sort(); console.log(arr2); //[0,11,11,13,20,8]
(3)控制sort()方法的排序方式:
var arr2 = [20,13,11,8,0,11]; //按升序排列 arr2.sort(function(a,b){ //a,b表示相鄰的兩個元素 //若返回值>0,數(shù)組元素將按升序排列 //若返回值<0,數(shù)組元素將按降序排列 return a-b; }); console.log(arr2); //[0,8,11,11,13,20]; 新數(shù)組按升序排 列 //按降序排列 arr2.sort(function(a,b){ return b-a; }); console.log(arr2); //[20,13,11,11,8,0];
-
splice()
通過刪除
或替換
現(xiàn)有元素或者原地添加
新的元素來修改數(shù)組,并以數(shù)組形式返回被修改的內(nèi)容捏顺。此方法會改變原數(shù)組。// 示例場景是: // 數(shù)據(jù)按頁獲取 // 在列表頁對某個item進(jìn)行操作修改了該item數(shù)據(jù) // 為達(dá)到重新更新單個item數(shù)據(jù) 纬黎,頁面所處頁數(shù)不變de效果 // 在commit之前先刪掉那一頁的數(shù)據(jù)幅骄,在相同的位置插入獲取到的 let currentList = [...state.pubAllOrder]; if (isReload) { //利用isReload判斷是要覆蓋數(shù)組 還是 初次加載該頁數(shù)據(jù) const {page, size} = pubOrders; currentList.splice((page)*size, size, ...list) } else { currentList = [...currentList, ...list] }
語法:
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
start: 指定修改的開始位置(從0計數(shù)).如果超出了數(shù)組的長度,則從數(shù)組末尾開始添加內(nèi)容本今;如果是負(fù)值拆座,則表示從數(shù)組末位開始的第幾位
deleteCount(可選):整數(shù),表示要移除的數(shù)組元素的個數(shù)冠息。
如果 deleteCount 被省略了挪凑,或者如果它大于或者等于start之后的所有元素的數(shù)量,那么start之后數(shù)組的所有元素都會被刪除逛艰。
如果 deleteCount 是 0 或者負(fù)數(shù)躏碳,則不移除元素。這種情況下散怖,至少應(yīng)添加一個新元素菇绵。
item1,item2...(可選):要添加進(jìn)數(shù)組的元素,從start 位置開始。如果不指定镇眷,則 splice() 將只刪除數(shù)組元素咬最。
字符串方法
首先定義一個字符串:
let browserType = 'mozilla';
-
indexOf()
找出一個較小的字符串是否存在于一個較大的字符串中browserType.indexOf('zilla');//output:2 browserType.indexOf('vanilla');//output:-1
-
slice()
提取字符串中的子字符串,知道開始的位置偏灿,以及結(jié)束的字符丹诀。browserType.slice(0,3); //output:moz
如果想知道在某個字符之后提取字符串中的所有剩余字符钝的,則不必包含第二個參數(shù)翁垂,而只需要包含要從中提取的字符位置 字符串中的其余字符。
browserType.slice(2);//output:'zilla'
toLowerCase()硝桩、toUpperCase()
將所有字符分別轉(zhuǎn)換為小寫或大寫-
replace()
將字符串中的一個子字符串替換為另一個子字符串,它需要兩個參數(shù) - 要被替換下的字符串和要被替換上的字符串沿猜。browserType = browserType.replace('moz','van');。
-
match()
在字符串內(nèi)檢索指定的值碗脊,或找到一個或多個正則表達(dá)式的匹配啼肩。
返回值:存放匹配結(jié)果的數(shù)組。match示例