總結(jié)一下項(xiàng)目中常用的數(shù)組的操作
如有不對的地方,歡迎指出
抱拳了
concat
concat 會合并兩個數(shù)組
const arr = [5, 17, 6, 8]
const arr1 = [5, 17, 6, 8, 6, 8]
arr.concat(arr1)
// [5, 17, 6, 8, 5, 17, 6, 8, 6, 8]
replace
replace 用于在字符串中用一些字符替換另一些字符谴返,或替換一個與正則表達(dá)式匹配的子串蓬衡。
// 表單驗(yàn)證需要判斷20個字符,一個漢字等于2個字符
// 正則匹配所有的漢字,然后替換成字符,可以隨意定義
value.replace(/[^/x00-\xff]/g, '**').length > 20
some
匹配數(shù)組中每一個元素,如果有一個元素通過由提供的函數(shù)實(shí)現(xiàn)的測試,則立刻返回true,否則返回false
// 可以用到的地方就很多了,比如需要判斷返回的數(shù)據(jù)中存不存在某個元素,就可以用這個方法來判斷
const arr = [5, 17, 6, 8]
arr.some(e => { return e > 9 }) // true
every
匹配數(shù)組中每一個元素,如果所有元素都通過由提供的函數(shù)實(shí)現(xiàn)的測試,則返回true,有一個沒有通過則返回false
const arr = [5, 17, 6, 8]
arr.every(e => { return e > 9 }) // false
filter
篩選出數(shù)組中符合條件的元素,組成一個新的數(shù)組
const arr = [5, 17, 6, 8]
// 可以過濾出想要的元素再進(jìn)行操作
arr.concat(arr1).filter(e => {return e > 7}) // [17, 8]
map
數(shù)組中的每個元素都調(diào)用一個提供的函數(shù)后返回一個新數(shù)組
const kvArr = [
{key: 1, value: 10},
{key: 1, value: 10},
{key: 1, value: 10},
{key: 2, value: 20},
{key: 3, value: 30},
{key: 4, value: 30},
]
kvArr.map(item => item.key).filter(e => e > 1) // [2, 3, 4]
forEach
讓數(shù)組中的每一項(xiàng)做一件事
const kvArr = [
{key: 1, value: 10},
{key: 1, value: 10},
{key: 1, value: 10},
{key: 2, value: 20},
{key: 3, value: 30},
{key: 4, value: 30},
]
kvArr.forEach(item => console.log(item))
// {key: 1, value: 10}
// {key: 1, value: 10}
// {key: 1, value: 10}
// {key: 2, value: 20}
// {key: 3, value: 30}
// {key: 4, value: 30}
push
將一個或多個元素添加到數(shù)組的末尾谨读,并返回新數(shù)組的長度
const arr = [5, 17, 6, 8]
arr.push(4) // 5
includes
方法用來判斷一個數(shù)組是否包含一個指定的值,返回 true或 false
const arr = [5, 17, 6, 8]
arr.includes(5) true
join
將數(shù)組(或一個類數(shù)組對象)的所有元素連接到一個字符串中
const kvArr = [
{key: 1, value: 10},
{key: 1, value: 10},
{key: 1, value: 10},
{key: 2, value: 20},
{key: 3, value: 30},
{key: 4, value: 30},
]
kvArr.map(item => {return item.key}).join(',')
//1,1,1,2,3,4
reduce
從左到右為每個數(shù)組元素執(zhí)行一次回調(diào)函數(shù)扎谎,并把上次回調(diào)函數(shù)的返回值放在一個暫存器中傳給下次回調(diào)函數(shù)危喉,并返回最后一次回調(diào)函數(shù)的返回值抢埋。
數(shù)組去重
- 第一種方法
// new Set 中的元素只可以出現(xiàn)一次,返回一個新的Set對象
// Array.from()再從一個類似數(shù)組或可迭代對象中創(chuàng)建一個新的數(shù)組實(shí)例
Array.from(new Set(kvArr.map(item => item.key)))
//可以用es6的 ... 的解構(gòu)賦值
[...new Set(kvArr.map(item => item.key))]
- 第二種方法
// 定義一個空數(shù)組 let ret = []
// include判斷是否包含元素
// push 如果不包含,則push到ret
let ret = []
kvArr.map(item => item.key).map(e => {
if (!ret.includes(e)) {
ret.push(e)
return ret
}
})
ret.map(a => {
switch(a) {
case 1 :
return console.log(111)
case 2 :
return console.log(222)
}
})
數(shù)組求和
- 這里要先明白一點(diǎn)
JavaScript數(shù)組方法是特意定義為通用的弹灭,因此他們不僅應(yīng)用在真正的數(shù)組,而且在類數(shù)組(包括String)對象上也能正確工作,
但是類數(shù)組對??無法繼承自Array.prototype,所以可以通過Function.call間接地調(diào)用揪垄。
// arguments對象 包含傳遞給函數(shù)的每個參數(shù)
// call的第一個參數(shù)表示真正調(diào)用reduce的環(huán)境變?yōu)榱薬rguments對象
// 也就是reduce方法中的this是指向arguments的穷吮。所以就好像arguments也具有了數(shù)組的方法。
// 能調(diào)用call的只有方法饥努,所以不能用[].call這種形式捡鱼,得用[].reduce.call
function sum(){
return [].reduce.call(arguments,function(x,b){
return (x|0)+(b|0);
})
}
sum(1, true, 'a', 'D', 1, 'F', 1, 'w')
// 4
數(shù)組排序
- 可以用sort()方法
需要注意的是:sort()方法默認(rèn)排序順序是根據(jù)字符串Unicode碼點(diǎn)。所以需要用函數(shù)表達(dá)式來實(shí)現(xiàn)數(shù)組的排序
[2,51,11,62,91,4,4,444,33,5].sort((x,y) => x-y)
// [2, 4, 4, 5, 11, 33, 51, 62, 91, 444]