Js日常筆記之數組
1、Array
構造函數有一個很大的問題,就是不同的參數,會導致它的行為不一致,es6好像專門為此對數組有升級
因此,不建議使用new Array生成新數組,直接使用數組字面量[...]是更好的做法。
2、Array.isArray
方法用來判斷一個值是否為數組。它可以彌補typeof
運算符的不足
var a = [1, 2, 3]; typeof a // "object" Array.isArray(a) // true
3、push()和pop() 結合使用,就構成了“後進先出”的棧結構(stack)
push
方法用於在數組的末端添加一個或多個元素,並返回添加新元素後的數組長度,
pop
方法用於刪除數組的最後一個元素,並返回該元素。
4、join()方法以參數作為分隔符,將所有數組成員組成一個字符串返回。如果不提供參數,默認用逗號分隔。
如果數組成員是undefined
或null
或空位,會被轉成空字符串
[undefined, null].join(‘#‘) // ‘#‘ [‘a‘,, ‘b‘].join(‘-‘) // ‘a--b‘
通過call
方法,這個方法也可以用於字符串
Array.prototype.join.call(‘hello‘, ‘-‘) // "h-e-l-l-o"
5、concat()方法用於多個數組的合並。返回一個新數組,原數組不變。
concat
也可以接受其他類型的值作為參數。它們會作為新的元素,添加數組尾部。
[1, 2, 3].concat(4, 5, 6) // [1, 2, 3, 4, 5, 6] // 等同於 [1, 2, 3].concat(4, [5, 6]) [1, 2, 3].concat([4], [5, 6])
註意:concat
方法返回當前數組的一個淺拷貝,如果數組中存在復合類型數據(比如對象),原數據改變,數組元素也會隨之改變;
let d={a:1} a=a.concat(d) //(8) [{…}, 2, "a", "b", true, 4, 5, {…}] a[7]//{a: 1} d.a=3//3 a[7]//{a: 3}
6、shift()和unshift()
shift
方法用於刪除數組的第一個元素,並返回該元素。push
shift
結合使用,就構成了“先進先出”的隊列結構(queue)
unshift
方法用於在數組的第一個位置添加一個或多個元素,並返回添加新元素後的數組長度
var arr = [ ‘c‘, ‘d‘ ]; arr.unshift(‘a‘, ‘b‘) // 4 arr // [ ‘a‘, ‘b‘, ‘c‘, ‘d‘ ]
7、slice()和splice()
slice
方法用於提取原數組的一部分,返回一個新數組,原數組不變。
// 格式 arr.slice(start_index, upto_index); // 用法 var a = [‘a‘, ‘b‘, ‘c‘]; a.slice(0) // ["a", "b", "c"] a.slice(1) // ["b", "c"] a.slice(1, 2) // ["b"] a.slice() // ["a", "b", "c"] ///如果slice方法的參數是負數,則表示倒數計算的位置。 var a = [‘a‘, ‘b‘, ‘c‘]; a.slice(-2) // ["b", "c"] a.slice(-2, -1) // ["b"]
splice
方法用於刪除原數組的一部分成員,並可以在被刪除的位置添加入新的數組成員,返回值是被刪除的元素。
splice
的第一個參數是刪除的起始位置,第二個參數是被刪除的元素個數。如果後面還有更多的參數,則表示這些就是要被插入數組的新元素。
var a = [‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘]; a.splice(4, 2, 1, 2) // ["e", "f"]//從e開始刪除2個元素,再插入後面的參數 a // ["a", "b", "c", "d", 1, 2] ///起始位置如果是負數,就表示從倒數位置開始刪除。 var a = [‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘]; a.splice(-4, 2) // ["c", "d"] ///常見用法,第二個參數給0,在指定位置插入新元素 var a = [1, 1, 1]; a.splice(1, 0, 2) // [] a // [1, 2, 1, 1]
8、reverse()和sort(),之所以兩個一起說,是因為二者都是封裝了一個常用的遍歷算法
reverse
方法用於顛倒數組中元素的順序,返回改變後的數組。
sort
方法對數組成員進行排序,默認是按照字典順序排序。數值會被先轉成字符串,再按照字典順序進行比較
sort
方法可以傳入一個函數作為參數,表示按照自定義方法進行排序
[ { name: "張三", age: 30 }, { name: "李四", age: 24 }, { name: "王五", age: 28 } ].sort(function (o1, o2) { return o1.age - o2.age;//a>b則調換位置,實現從小到大的排序 }) // [ // { name: "李四", age: 24 }, // { name: "王五", age: 28 }, // { name: "張三", age: 30 } // ]
Js日常筆記之數組