改變原數(shù)組方法:
1蛋勺、push():尾部添加,返回值是改變后的數(shù)組長度鸠删;
var arr = [1, 2];
arr.push(3) ;// 3
arr; // [1, 2, 3]
arr.push('b','c'); //5
arr; //[1, 2, 3, "b", "c"]
arr.push([10,20]); //6
arr; //[1, 2, 3, "b", "c", [10,20]]
2抱完、pop()尾部刪除,返回值是刪除的元素冶共;
var arr =[1, 2, 3, "b", "c", [10,20]];
arr.pop(); //[10, 20]
arr; // [1, 2, 3, "b", "c"]
3乾蛤、unshift()頭部添加每界,返回值是改變后的數(shù)組長度捅僵;
var arr = [1, 2];
arr.unshift(3,4 ); //4
arr; // [3, 4, 1, 2]
4.shift()頭部刪除,返回值是刪除的元素眨层;
var arr = ['a', 'b', 1, 2];
arr.shift(); //'a'
arr; //['b', 1, 2]
5庙楚、sort()數(shù)組排序犹芹;
1.默認(rèn)是將所有元素轉(zhuǎn)換成字符串样悟,再按字符串Unicode碼點(diǎn)排序。返回值是新的數(shù)組归榕。
var arr = [1, 2, 12, 'a', 'b', 'ab', 'A', 'B']
arr.sort(); //[1, 12, 2, "A", "B", "a", "ab", "b"] 注意:12排在了2的前面
2.果元素都是數(shù)字叁征,要按從小到大排序纳账,可以傳入一個(gè)回調(diào)函數(shù)作為參數(shù)。
var arr = [1, 2, 12, 100]
arr.sort(function(a,b){
return a-b;
});
// [1, 2, 12, 100]
6捺疼、reverse()顛倒數(shù)組中元素的位置疏虫;
var arr = [1, 2, 12, 'a', 'b', 'ab', 'A', 'B'];
arr.reverse();
//["B", "A", "ab", "b", "a", 12, 2, 1]
7、array.splice()截取或者添加啤呼;返回值是截取的元素
array.splice(index,howmany,item1,.....,itemX)
參數(shù):
index:必需傳卧秘。整數(shù),規(guī)定添加/刪除項(xiàng)目的位置官扣,使用負(fù)數(shù)可從數(shù)組結(jié)尾處規(guī)定位置翅敌。
howmany :必需傳。要?jiǎng)h除的項(xiàng)目數(shù)量惕蹄。如果設(shè)置為 0蚯涮,則不會刪除項(xiàng)目。
item1, ..., itemX:可選卖陵。向數(shù)組添加的新項(xiàng)目遭顶。
1.只刪除,不添加「洗伲可以傳入2個(gè)參數(shù):
var arr = ['Alibaba', 'Tencent', 'Baidu', 'XiaoMi', '360'];
// 從索引2開始刪除3個(gè)元素
arr.splice(2, 3); // 返回刪除的元素 ['Baidu', 'XiaoMi', '360']
arr; // ['Alibaba', 'Tencent']
2.只添加,不刪除液肌。第2個(gè)參數(shù)設(shè)為0,即不刪除元素鸥滨。
arr.splice(2, 0, 'Toutiao', 'Meituan', 'Didi'); // 返回[],因?yàn)闆]有刪除任何元素
arr; //["Alibaba", "Tencent", "Toutiao", "Meituan", "Didi"]
3.先刪除若干元素嗦哆,然后在刪除的位置上在添加若干個(gè)元素谤祖。
var arr =["Alibaba", "Tencent", "Toutiao", "Meituan", "Didi"]
arr.splice(2,2,'Apple','Google'); //["Toutiao", "Meituan"]
arr; //["Alibaba", "Tencent", "Apple", "Google", "Didi"]
不改變原數(shù)組的方法
1、ndexOf() 和lastIndexOf()
1.indexof() : 返回元素在數(shù)組的第一次出現(xiàn)的索引老速,從0開始粥喜。若數(shù)組不存在該元素,則返回-1橘券。
var arr = [1, 2, 2];
arr.indexOf(1); //0
arr.indexOf(10); //-1
2.lastIndexOf(): 返回元素在數(shù)組最后一次出現(xiàn)的索引额湘,如果沒有出現(xiàn)則返回-1.
var arr = [1, 2, 2];
arr.lastIndexOf(2); //2
arr.lastIndexOf(10); //-1
2、slice()截取數(shù)組的一部分旁舰,返回一個(gè)新的數(shù)組锋华,與字符串的substring()方法一樣
1.slice(start)一個(gè)參數(shù),索引從start開始截取
var arr = [1, 2, 2, 5, 6];
arr.slice(2) // [2, 5, 6]
2.slice(start,end)兩個(gè)參數(shù)箭窜,索引從start開始到索引end結(jié)束毯焕。通常,接受2個(gè)參數(shù)作為一個(gè)左閉右開區(qū)間磺樱,即包括開始索引位置的元素纳猫,但不包括結(jié)束索引位置的元素。
var arr = [1, 2, 2, 5, 6];
arr.slice(1,3) // [2, 2]
3.slice()沒有參數(shù)竹捉,則是復(fù)制整個(gè)數(shù)組芜辕。
var arr = [1, 2, 2, 5, 6];
arr.slice();
3、concat():合并數(shù)組块差。返回一個(gè)新的數(shù)組
1.方法的參數(shù)可以有多個(gè)侵续,也可以任意類型,數(shù)值憾儒、字符串询兴、布爾值、數(shù)組起趾、對象 都可以诗舰,參數(shù)會被添加到新的數(shù)組中。
var arr1 = [1, 2, 3,4,5,6];
var arr2 = ['a','b','c'];
var arr3 = arr1.concat(arr2);
arr3; //[1, 2, 3, 4, 5, 6, "a", "b", "c"]
2.注意训裆,如果參數(shù)是數(shù)組, 會被拉平一次眶根,即數(shù)組會被拆開來,加入到新的數(shù)組中边琉。
var arr1 = [1, 2, 3];
var arr2 = arr1.concat(66,'abc',true,[10,20],[30,[31,32]],{x:100});
arr2; //[1, 2, 3, 66, "abc", true, 10, 20, 30, [31,32], {x:100}]
4属百、join()將數(shù)組轉(zhuǎn)換為字符串
它會把當(dāng)前Array的每個(gè)元素都用指定的字符串連接起來,然后返回連接后的字符串变姨。
1.參數(shù)是用來指定連接的字符串族扰。
var arr = [1, 2, 3];
arr.join('*') //"1*2*3"
2.如果沒有指定參數(shù),默認(rèn)是用 "," 連接。
var arr = [1, 2, 3];
arr.join() //"1,2,3"
5渔呵、toString(): 返回?cái)?shù)組的字符串形式
var arr = [1, 2, 3];
arr.toString() // "1,2,3"
6怒竿、map()數(shù)組中的元素為原始數(shù)組元素調(diào)用函數(shù)處理后的值。
map() 方法按照原始數(shù)組元素順序依次處理元素扩氢。
注意: map() 不會對空數(shù)組進(jìn)行檢測耕驰。
注意: map() 不會改變原始數(shù)組。
1.對數(shù)組的所有成員依次調(diào)用一個(gè)函數(shù)录豺,返回值是一個(gè)新數(shù)組朦肘。
arr.map(function(elem, index, arr) {
return elem * index;
});
//[0, 2, 6]
2.map方法接受一個(gè)函數(shù)作為參數(shù),該函數(shù)調(diào)用時(shí),map方法會將其傳入3個(gè)參數(shù)双饥,分別是當(dāng)前成員媒抠、當(dāng)前位置和數(shù)組本身(后2個(gè)參數(shù)可選)。
arr.map(function(elem, index, arr) {
return elem * index;
});
//[0, 2, 6]
3.map方法還可以接受第2個(gè)參數(shù)兢哭,表示回調(diào)函數(shù)執(zhí)行時(shí)this所指向的對象领舰。
7夫嗓、forEach():
與map方法很相似迟螺,也是遍歷數(shù)組的所有成員,執(zhí)行某種操作舍咖。注意:forEach方法一般沒有返回值
var arr = [1, 2, 3];
function log(element, index, array) {
console.log('[' + index + '] = ' + element);
}
arr.forEach(log);
// [0] = 1
// [1] = 2
// [2] = 3
8矩父、filter(): 刪選
var arr = [1, 2, 3, 4, 5];
arr.filter(function (elem, index, arr) {
return index % 2 === 1;
});
//[2, 4]
9、some()和every()方法都是JS中數(shù)組的迭代方法排霉。ES5里的迭代函數(shù)
接受一個(gè)函數(shù)作為參數(shù)窍株,所有數(shù)組成員依次執(zhí)行該函數(shù),返回一個(gè)布爾值攻柠。該函數(shù)接受三個(gè)參數(shù)球订,依次是當(dāng)前位置的成員、當(dāng)前位置的序號和整個(gè)數(shù)組瑰钮。
1.some方法是只要有一個(gè)數(shù)組成員的返回值是true冒滩,則整個(gè)some方法的返回值就是true,否則false浪谴。
var arr = [1, 2, 3, 4];
arr.some(function (elem, index, arr) {
return elem >= 3;
});
// true
2.every方法則是所有數(shù)組成員的返回值都是true开睡,才返回true,否則false苟耻。
var arr = [1, 2, 3, 4];
arr.every(function (elem, index, arr) {
return elem >= 3;
});
// false
注意篇恒,對于空數(shù)組,some方法返回false凶杖,every方法返回true
總結(jié):ES5提供的迭代函數(shù):
forEach(): 對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),無返回值
every(): 對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)每一項(xiàng)都返回true,則返回true
some(): 對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),如果該函數(shù)任意一項(xiàng)返回true,則返回true
map(): 對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組
filter(): 對數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù),該函數(shù)會返回true的項(xiàng)組成的數(shù)組
10胁艰、reduce()和reduceRight():依次處理數(shù)組的每個(gè)成員,最終累計(jì)為一個(gè)值。
1.reduce是從左到右處理(從第一個(gè)成員到最后一個(gè)成員)
arr = [1, 2, 3]
arr.reduce(function(x, y){
console.log(x, y)
return x + y;
});
// 1 2
// 3 3
// 6
2.reduceRight則是從右到左處理(從最后一個(gè)成員到第一個(gè)成員)
rr.reduceRight(function(x, y){
console.log(x, y)
return x + y;
});
// 3 2
// 5 1
// 6