分別舉例說(shuō)明數(shù)組方法push敌土、pop镜硕、shift、unshift返干、join兴枯、splice、sort矩欠、join财剖、reverse、concat的作用癌淮?
var arr = [1, 2, 3, 4, 5, "cat"] //定義一個(gè)數(shù)組
//push
arr.push(6);//數(shù)組最后添加一個(gè)元素6
console.log(arr);//[1, 2, 3, 4, 5, "cat", 6]
//pop
console.log(arr.pop());//把數(shù)組的最后一個(gè)元素取出來(lái)躺坟,返回這個(gè)元素6
console.log(arr);//[1, 2, 3, 4, 5, "cat"]
//shift
console.log(arr.shift());//1 把數(shù)組的第一個(gè)元素取出來(lái),返回這個(gè)元素
//unshift
arr.unshift("dog");//向數(shù)組頭部添加一個(gè)元素'dog'
console.log(arr);//["dog", 2, 3, 4, 5, "cat"]
//join
console.log(arr.join("-"));
//"dog-2-3-4-5-cat"
//join(char)把數(shù)組元素(對(duì)象調(diào)用其toString()方法)使用參數(shù)作為連接符連接成一字符串乳蓄,不會(huì)修改原數(shù)組內(nèi)容
splice
用于一次性解決數(shù)組添加瞳氓、刪除(這兩種方法一結(jié)合就可以達(dá)到替換效果),方法有三個(gè)參數(shù)
- 開(kāi)始索引
- 刪除元素的位移
- 插入的新元素,當(dāng)然也可以寫(xiě)多個(gè)
splice方法返回一個(gè)由刪除元素組成的新數(shù)組匣摘,沒(méi)有刪除則返回空數(shù)組
arr = ["dog", 2, 3, 4, 5, "cat"]
console.log(arr.splice(1, 3));//[2, 3, 4] 刪除索引1到3的值并返回
console.log(arr);//["dog", 5, "cat"] 刪除后的數(shù)組
arr.splice(1, 0, 8, 9, 100, "tiger");
/*第二個(gè)參數(shù)店诗,也就是刪除動(dòng)作執(zhí)行的次數(shù)設(shè)為0,第三個(gè)參數(shù)及以后填寫(xiě)要插入內(nèi)容就splice就能執(zhí)行插入操作音榜。
而如果第二個(gè)參數(shù)不為0則變成了先在該位置刪除再插入庞瘸,也就是替換效果*/
console.log(arr);//["dog", 8, 9, 100, "tiger", 5, "cat"]
sort
sort方法用于對(duì)數(shù)組進(jìn)行排序,當(dāng)沒(méi)有參數(shù)的時(shí)候會(huì)按字母表升序排序赠叼,如果含有undefined會(huì)被排到最后面擦囊,對(duì)象元素則會(huì)調(diào)用其toString方法,如果想按照自己定義方式排序嘴办,可以傳一個(gè)排序方法進(jìn)去瞬场,很典型的策略模式,同樣sort會(huì)改變?cè)瓟?shù)組涧郊。
arr = ["dog", 2, 3, 4, 5, "cat"]
arr.sort();
console.log(arr);//[2, 3, 4, 5, "cat", "dog"]
但是
var a=[7,8,9,10,11]
a.sort()
console.log(a) //[10, 11, 7, 8, 9]
調(diào)用toString贯被,按照字母表排序,7就比10大了妆艘,這時(shí)候我們需要傳入自定義排序函數(shù)彤灶。
如果想按照數(shù)值排序,可
var a = [7,8,9,10,11]
a.sort(function(v1,v2){
return v1-v2
})
console.log(a) //[7, 8, 9, 10, 11]
var users = [
{
name: 'aaa',
age: 21
},
{
name: 'baa',
age: 18
},
{
name: 'abc',
age: 24
}
]
// 按age 從小到大排序
var sortByAge = users.sort(function(v1, v2){
return v1.age > v2.age
})
// 按name從大到小排序
var sortByName = users.sort(function(v1, v2){
return v1.name > v2.name
})
reverse
方法用于將數(shù)組逆序批旺,與之前不同的是它會(huì)修改原數(shù)組
var a = [1,2,3,4,5];
a.reverse();
console.log(a); //[5, 4, 3, 2, 1]
concat
concat方法用于拼接數(shù)組幌陕,a.concat(b)返回一個(gè)a和b共同組成的新數(shù)組,同樣不會(huì)修改任何一個(gè)原始數(shù)組汽煮,也不會(huì)遞歸連接數(shù)組內(nèi)部數(shù)組
var a = [1,2,3,4,5];
var b = [6,7,8,9];
console.log(a.concat(b));//[1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(a); //[1, 2, 3, 4, 5]
console.log(b); //[6, 7, 8, 9]
分別舉例說(shuō)明ES5數(shù)組方法 indexOf搏熄、forEach、map暇赤、every心例、some、filter翎卓、reduce的用法契邀?
.indexOf(element) / .lastIndexOf(element)
這兩個(gè)方法用于查找數(shù)組內(nèi)指定元素位置,查找到第一個(gè)后返回其索引失暴,沒(méi)有查找到返回-1坯门,indexOf從頭至尾搜索,lastIndexOf反向搜索逗扒。
var a = [1,2,3,3,2,1]
console.log(a.indexOf(2)) //1
console.log(a.lastIndexOf(2)) //4
.forEach(element, index, array)
遍歷數(shù)組古戴,參數(shù)為一個(gè)回調(diào)函數(shù),回調(diào)函數(shù)有三個(gè)參數(shù):
- 當(dāng)前元素
- 當(dāng)前元素索引值
- 整個(gè)數(shù)組
var a = new Array(1,2,3,4,5,6);
a.forEach(function(e,i,array){
array[i]= e + 1;
});
console.log(a); //[2, 3, 4, 5, 6, 7]
.map(function(element))
與forEach類(lèi)似矩肩,遍歷數(shù)組现恼,回調(diào)函數(shù)返回值組成一個(gè)新數(shù)組返回,新數(shù)組索引結(jié)構(gòu)和原數(shù)組一致,原數(shù)組不變
var a = [1, 2, 3, 4, 5, 6]
console.log(a.map(function(e){
return e * e
})) // [1, 4, 9, 16, 25, 36]
console.log(a) //[1, 2, 3, 4, 5, 6]
.every(function(element, index, array)) / .some(function(element, index, array))
這兩個(gè)函數(shù)類(lèi)似于離散數(shù)學(xué)中的邏輯判定叉袍,回調(diào)函數(shù)返回一個(gè)布爾值
- every是所有函數(shù)的每個(gè)回調(diào)函數(shù)都返回true的時(shí)候才會(huì)返回true始锚,當(dāng)遇到false的時(shí)候終止執(zhí)行,返回false
- some函數(shù)是“存在”有一個(gè)回調(diào)函數(shù)返回true的時(shí)候終止執(zhí)行并返回true喳逛,否則返回false
在空數(shù)組上調(diào)用every返回true瞧捌,some返回false
var a = [1, 2, 3, 4, 5, 6]
console.log(a.every(function(e, i, arr){
return e < 5
}))
console.log(a.some(function(e,i,arr){
return e > 4
}))
.filter(function(element))
返回?cái)?shù)組的一個(gè)子集,回調(diào)函數(shù)用于邏輯判斷是否返回润文,返回true則把當(dāng)前元素加入到返回?cái)?shù)組中姐呐,false則不加
新數(shù)組只包含返回true的值,索引缺失的不包括典蝌,原數(shù)組保持不變
var a = [1, 2, 3, 4, 5, 6]
console.log(a.filter(function(e){
return e % 2 == 0;
})) // [2, 4, 6]
console.log(a) //[1, 2, 3, 4, 5, 6]
.reduce(function(v1, v2), value) / .reduceRight(function(v1, v2), value)
遍歷數(shù)組曙砂,調(diào)用回調(diào)函數(shù),將數(shù)組元素組合成一個(gè)值骏掀,reduce從索引最小值開(kāi)始鸠澈,reduceRight反向,方法有兩個(gè)參數(shù)
- 回調(diào)函數(shù):把兩個(gè)值合為一個(gè)砖织,返回結(jié)果
- value款侵,一個(gè)初始值,可選
var a = [1, 2, 3, 4, 5, 6]
var b = a.reduce(function(v1, v2){ return v1 + v2 })
console.log(a) // 21
var b = a.reduceRight(function(v1, v2){ return v1 - v2 }, 100)
console.log(b) // 79