數(shù)組常用屬性和方法總結(jié)
- 數(shù)組也是對象问潭,數(shù)組有對象的所有方法
1. 數(shù)組屬性(2個主要屬性)
-
length -> 萬年不變的最常用屬性
使用length 應(yīng)該注意的幾個問題 (
javascript 很容易因為length 的問題導(dǎo)致整個數(shù)組的長度修改弧可,其他的多數(shù)語言不允許修改數(shù)組的長度
)-
對 arr 的length 賦值會導(dǎo)致 arr修改
var arr = [1, 2 ,3]; arr.length = 5; arr // [1, 2, 3, undefined, undefined] arr.length = 1; arr // [1];
-
通過索引對 arr 的元素賦值會引起 arr 值得改變(正常情況)聪黎,但是對 arr 的索引超過其長度時也會引起 arr 的長度發(fā)生變化
var arr = [1, 2, 3]; arr[2] = 5; arr // [1, 2, 5]; var arr = [1, 2, 3]; arr[4] = 9; arr // [1, 2, 3, undefined, 4];
-
-
prototype 返回對象類型原型的引用 (
主要作用:對數(shù)組進(jìn)行擴(kuò)展
)eg: 向數(shù)組中添加 max 方法, 使得數(shù)組可以使用 max() 取得 最大值 function max() { var ele = this[0]; for(var i = 0; i < this.length-1; i++) { ele = this[i] > this[i+1] ? this[i] : this[i+1]; } return ele; } Array.prototype.max = max; [1,2,5,4,6].max() // 6
2.數(shù)組方法 (注意數(shù)組方法的大小寫
) +
方法最重要的就是 return 和 參數(shù)
數(shù)組的增 刪 改 查
速記版本
棧方法: push() , pop()
隊列方法: shift() unshiift()
重排序方法:reverse() sort()
分割合并方法: slice() splice() concat() join()
數(shù)組遍歷: map() foreach() filter()
注意 操作數(shù)組以后的返回值: 是否為數(shù)組线梗? 字符元素痊班?角撞,是否覆蓋原來的數(shù)組
map() 根據(jù)操作值改變原數(shù)組
foreach() 不需要返回值答毫,用來操作元素
filter() 根據(jù)返回的布爾值 構(gòu)成新數(shù)組褥民,不影響原數(shù)組
concat 和 slice 都會返回一個新數(shù)組,不會更改原來的數(shù)組
var arr = new Array('張三', '李四');
arr instanceof Array // true
Array.isArray(arr) // true // 數(shù)組的兩個對比方法
// 棧方法和隊列方法的順序很重要
arr.push('王五') //return:3 數(shù)組:[ '張三', '李四', '王五' ]
arr. pop() //return '王五' 數(shù)組:[ '張三', '李四' ]
arr.shift() //return: 張三 數(shù)組:['李四' ]
arr.unshift('趙六') // return: 2 數(shù)組 :['趙六', '李四']
arr.reverse() // return ['李四', '趙六']
arr.sclice(0, 1); // return ['李四'] 原數(shù)組: ['李四', '趙六']
arr.splice(0, 1, '小小') // return ['小小'] 原數(shù)組:['小小', '趙六']
es6 新增的幾個很有用的方法
find( Fun ) // 返回 元素
findIndex( Fun ) // 返回元素位置
includes( ele ) // 返回 布爾值
<ps: 最早的分類....>
查/索引: indexOf,
增: push, unshift, concat, join
刪: pop, shift, slice
改: splice 萬能方法
其他:sort(), reverse()
數(shù)組的截取和合并:splice 和 concat
數(shù)組和字符串的轉(zhuǎn)換: join (toLocaleString 洗搂、toString 消返、valueOf)
[1, 2, 3, 4, 5].join('') //12345;
'language'.split('') //['l', 'a', 'n', 'g', 'u', 'a', 'g', 'e'];
數(shù)組的拷貝: concat(), slice(0)
數(shù)組元素的排序 sort() , reverse()
`注意數(shù)組元素的長度(length)是可變的`
`concat 和 slice 都會返回一個新數(shù)組载弄,不會更改原來的數(shù)組`
es5 的數(shù)組9個實用方法
Array.prototype.indexOf
Array.prototype.lastIndexOf
Array.prototype.every
Array.prototype.some
Array.prototype.forEach
Array.prototype.map
Array.prototype.filter
Array.prototype.reduce
Array.prototype.reduceRight
-
indexOf ()
return 當(dāng)前元素在數(shù)組中的索引
對用 lastIndexof (這個不解釋)
該`返回值`配合數(shù)組的 splice,slice 或者 字符串的 slice,substr,substring 等增刪改方法有奇效。
-
sort
返回排序好的數(shù)組
可按照自定義的邏輯排序
-
push 將元素添加至數(shù)組的末尾, 與 pop 對應(yīng)
var arr = [] arr.pop(); // 空數(shù)組繼續(xù)pop不會報錯撵颊,而是返回undefined arr; // []
-
shift 將數(shù)組隊首的元素刪除宇攻,與 unshift 對應(yīng)
var arr = []; arr.unshift() // 空數(shù)組繼續(xù) shift 不會報錯,而是返回 undefined arr; // []
-
concat 方法 concat(arr1, arr2, arr3)
return 一個連接好的新數(shù)組
注意點:
concat 會返回一個新數(shù)組倡勇,而不修改原來的數(shù)組
-
slice 方法 slice(start,end)
return 一個分割好的新數(shù)組
注意點: slice會返回一個新數(shù)組逞刷,而不是修改原來的數(shù)組
slice 對應(yīng) string 的 subString 方法,截取元素返回一個新的 Array var arr = [1, 2, 3, 4] arr.slice(1, 3) //[2, 3, 4]
-
數(shù)組元素反轉(zhuǎn) reverse() reverse() // 沒有參數(shù)
var arr = [1, 2, 3, 4]; arr.reverse() // [4, 3, 2, 1];
-
splice 數(shù)組修改的萬能方法 splice (index, count, ele1, ele2 ....)
注意點:
index 可以為負(fù)數(shù)译隘,表示從隊尾開始修改 count 需要 刪除 的數(shù)量, 為 0 表示不刪除 ele1, ele2...... 可以向數(shù)組中添加的元素 var arr = [1, 2, 3, 4]; arr.splice(1, 0, '1', '3'); arr // [1, '1', '3', 2, 3, 4]
-
join 將元素用指定的字符串連接起來 ,
join 會將每個元素 轉(zhuǎn)換成為字符串再進(jìn)行連接
var arr = [1, 3, 'w', 'r']; arr.join('-'); arr // "1-3-w-r"
3. 數(shù)組的遍歷方法
-
萬年不變的 for 循環(huán)
注意不要使用 for in 循環(huán) 洛心,有坑自己找
-
array.forEach(callback (currentValue, index, array)[, thisArg])
直接修改原數(shù)組
forEach 中的callback 有三個參數(shù)
作用: 為了為每個元素都執(zhí)行添加執(zhí)行某個函數(shù)
-
array.map(callback (currentValue, index, array)[, thisArg])
返回一個新數(shù)組
返回一個經(jīng)過處理的新數(shù)組,不會破壞原來的數(shù)組
-
array.every(callback(currentValue, index, array)[, thisArg])
返回一個 true / false
測試數(shù)組的
所有元素
是否都通過了指定函數(shù)的測試固耘。 (&& 的概念) -
array.some(callback[, thisArg])
返回一個 true/false
測試數(shù)組中的某些元素是否通過了指定函數(shù)的測試 (|| 的概念)
需要在此注意 方法的對應(yīng)性 -> 一個很好的理解和記憶的思路 some (||的類比) + every(&& 的類比)
-
var new_array = arr.filter(callback(currentValue, index, array)[, thisArg])
返回一個函數(shù)處理結(jié)果為 true 的元素組成的數(shù)組
返回一個新數(shù)組
function isBigEnough (value) { return value > 10; } var filtered = [1, 12, 3, 54, 10].filter(isBigEnough); filtered // [12, 54]
4. 數(shù)組特殊處理的應(yīng)用
-
數(shù)組的值比較 是否相等(
因為數(shù)組為引用類型的數(shù)據(jù),所以數(shù)組不能直接比較
)eg: var arr = ['1', '2', '3']; var arr2 = ['1', '2', '3']; arr == arr2 ? // false
數(shù)組比較值是否相等的集中方法
-
將數(shù)組轉(zhuǎn)換為字符串然后比較其是否相等
eg: var arr = ['1', '3', '2']; var arr2 = ['1', '3', '2']; arr.toString() == arr2.toString() ? // true
但是當(dāng)數(shù)組中的值大小相同词身,但因為數(shù)組順序不同時轉(zhuǎn)出來的字符串也不相同
['1', '2', '3'].toString() == ['1', '3', '2'].toString ? //false
現(xiàn)將數(shù)組進(jìn)行排序厅目,然后作比較。
var arr = ['1', '2', '3']; var arr2 = ['1', '3', '2']; arr.sort().toString() == arr2.sort().toString() ? // true
-
-
判斷數(shù)組中是否有 空值
arr[index] =="" || typeof(arr[index]) == 'undefined'
typeof(arr[index]) == 'undefined' 主要用于判斷數(shù)組
無意間加長后數(shù)組中會增加 undefined 值
-
數(shù)組復(fù)制
主要原理: 尋找數(shù)組中可以返回新數(shù)組的方法
-
concat 數(shù)組的方法法严,返回一個新數(shù)組,
在 concat 后面不連接任何元素即可返回 新數(shù)組
var arr = [1, '23', 2];
var arr2 = arr.concat();
arr2 // [1,'23',2];
arr // [1,'23',2]; -
slice 數(shù)組的方法损敷,返回一個新數(shù)組,
slice 不采取任何符號切分即可返回一個新數(shù)組
var arr = ['1', '2', '3'];
var arrCopy = arr.slice();
arr // ['1', '2', '3'];
arrCopy // ['1', '2', '3'];
-
-
數(shù)組和數(shù)組字符之間的轉(zhuǎn)換
數(shù)組轉(zhuǎn)為字符數(shù)組
arr = [1,2,3,4]; var arrString = "[" + arr + "]"; //"[1,2,3,4]"
字符數(shù)組轉(zhuǎn)為數(shù)組
eval('(' + arrString + ')'); //[1,2,3,4];