數組的建立方法:
(1)直接量:數組
var a = [1,2,3,4,5,]; // 注意:索引從0開始,最後一個是逗號可選的
複製代碼
(2)調用構造方法bash
var arr = new Array(10)
var arry = new Array(1,2,3,4,5)
複製代碼
(1)join() :將數組的全部元素都轉換爲字符串並鏈接在一塊兒,返回生成的字符串,能夠指定一個可選的字符串鏈接數組的每一個元素,若是沒有指定,默認使用逗號函數
var a = [1,2,3]
a.join() // => "1,2,3"
a.join(" ") // => "1 2 3"
// Array.join()方法是String.split()的逆向操做,split()是把字符串分割成若干塊建立一個數組
複製代碼
(2)reverse() :將數組中的元素顛倒順序,返回逆序的數組
(3)sort() :將數組中的元素排序並返回排序後的數組,不帶參數的調用sort()時,數組元素是以字母表順序排序的。ui
var a = [33,4,111,222]
a.sort() // => 111,222,33,4
a.sort(function(a,b){
return a-b;
})
a.sort(function(a,b){
return b-a;
})
複製代碼
(4)concat() : 建立並返回一個新數組spa
var a = [1,2,3]
a.concat([4,5]) // => [1,2,3,4,5]
a.concat(4,5) // => [1,2,3,4,5]
複製代碼
(5)slice() : 返回指定數組的一個片斷或者子數組,它的兩個參數分別指定了片斷的開始位置和結束位置,不會修改原數組。切記:包含第一個參數指定的元素,不包含最後一個參數指定的位置。 若是出現負數,-1表示最後一個元素位置code
var a = [1,2,3,4,5]
a.slice(0,3) // => [1,2,3]
a.slice(3) // => [4,5]
a.slice(1,-1) // => [2,3,4]
複製代碼
(6)splice() :在數組中插入或者刪除元素的通用方法。會修改原數組。它的兩個參數:第一個參數指定了插入或者刪除的起始位置,第二個參數指定了從數組中刪除的元素個數,若是省略第二個參數,表示從起點開始到數組的結尾的全部元素都刪除。返回一個由刪除元素組成的數組,若是沒有刪除元素就返回一個空數組。而且原數組也發生了改變對象
var a= [1,2,3,4,5]
a.splice(2) // => 返回[3,4,5] 原數組:a=[1,2]
a.splice(1,1) // => 返回[2] 原數組: a=[1]
複製代碼
splice()的前兩個參數指定了須要刪除的數組元素。緊隨其後的任意多個參數指定了須要插入到數組中的元素,從第一個參數指定的位置開始插入排序
var a = [1,2,3,4,5]
a.splice(2,0, 'a', 'b') // => 返回[]空數組 , 原數組:a = [1,2,'a','b',3,4,5]
複製代碼
(7)push()和pop() : push():在數組尾部添加一個或者多個元素,並返回數組長度
pop():刪除數組最後一個元素,返回它刪除的值索引
var stack = []
stack.push(1,2,3) // 返回3長度 stack = [1,2,3]
stack.pop(); // 返回3元素值 stack = [1,2]
複製代碼
(8)unshift()和shift()
unshift()在數組的頭部添加一個或者多個元素,並返回數組長度 shift() 刪除數組第一個元素,並返回刪除的值ip
var a = []
a.unshift(111) // 返回1 a = [222]
a.unshift(333,555) // 返回3 a = [333,555,111]
a.shift() // 返回333 a = [555,111]
複製代碼
(1)forEach() :從頭到尾遍歷數組,爲每一個元素調用指定的函數。該方法的第一個參數就是被用的函數,而且向該函數傳遞了三個參數:分別是(每一個數組元素,元素的索引,數組自己)。有兩種寫法:
var data = [1,2,3,4,5]
data.forEach(function(val){
console.log(val)
})
data.forEach(function(val,i,data){
a[i] = val + i // 每一個元素自增1
})
複製代碼
(2)map() : 將調用的數組的每個元素傳遞給指定的函數,計算,並返回一個新數組,
var a = [1,2,3,4,5]
b = a.map(function(val){
return val * val
})
// 注意:map()返回的是新數組,它不修改調用的數組
複製代碼
(3)filter() : 返回的數組元素是調用數組的一個子集,傳遞的函數是過濾和判斷的條件,返回true和false。 若是函數返回值爲true,那麼傳遞給函數的元素就會被放到返回的數組中,若是函數返回值爲false,就過濾到該元素
var a = [1,2,3,4,5]
b = a.filter(function(val){
return x < 3
}) // b = [1,2]
// 對稀疏數組,壓縮空缺並刪除undefined和null元素
a = a.filter(function(val){
return x !== undefined && x !=null
})
複製代碼
(3)every()和some()
every(): 函數中全部元素判斷條件都爲true,才返回true
some(): 函數中全部元素判斷條件只要有一個爲true,就返回true
var a = [1,2,3,4,5]
a.every(function(val){
return val < 10 // 返回true
})
a.every(function(val){
return val % 2 === 0 // 返回false ,存在不符合的元素
})
a.some(function(val){
return val % 2 ===0 ; // 返回 true, 有一個元素知足就能夠了
})
a.some(isNaN) // 返回false, 遍歷數組,不存在這樣非數值的元素
複製代碼
(4)reduce()和reduceRight() : 使用指定的函數將數組元素進行組合計算,生成單個值,並返回。reduce()須要兩個參數。第一個參數是執行的函數,對元素繼續計算組合,並返回簡化以後的值。第二個參數可選,是一個傳遞給函數的初始值
var a = [1,2,3,4,5]
var sum = a.reduce(function(x,y){
return x + y;
},0)
// 0是第一個傳遞個函數的初始值,因此第一次 0 + 1 = 1, 返回值1
// 第二次計算: 返回值加上第二個元素: 1 + 2 = 3 返回值3,依次計算
var product = a.reduce(function(x,y){
return x * y;
},1)
var max = a.reduce(function(x,y){
return x > y ? x : y;
})
// 若是reduce()沒有第二個參數,它就使用數組的第一個元素做爲初始值
複製代碼
reduceRight()和reduce()工做原理同樣,區別是:reduceRight()按照數組索引從高到底,從右到左處理數組,並進行計算
// 把p中的可枚舉屬性複製到oz中,並返回o
function extend(o,p) {
for (prop in p) {
o[prop] = p[prop];
}
return o;
}
// 返回一個新對象,同時擁有o對象和p對象屬性
function union(o,p) {
return extend(extend({},o),p)
}
//對象的並集
var object = [{x:1},{y:2},{z:3}]
var merged = object.reduct(union) // 返回 => {x;1,y:2,z:3}
// 若是簡化的時候,有相同屬性,union函數是使用第一個參數的屬性
var objects = [{x:1,a:1},{y:2,a:2},{z:3,a:3}];
var leftUnion = objects.reduct(union) // =>{x:1,y:2,z:3,a:1}
var rightUnion = objects.reductRight(union) // =>{x:1,y:2,z:3,a:3}
複製代碼
(5)indexOf和lastIndexOf : 搜索整個數組中具備給定值的元素,並返回找到的第一個元素的索引或者若是沒有找到就返回-1。indexOf():從頭到尾搜索 lastIndexOf():從後往前搜索
var a = [0,1,2,3,3,2,1,0]
a.indexOf(1) // 返回索引位置:1
a.lastIndexOf(1) // 返回索引位置:6
a.indexOf(9) //返回 -1
// 在數組中查找全部出現的b,並返回一個包含匹配索引的數組
var c = [0,1,2,3,3,2,1,0,6,2,4]
function findall(a,b) {
var results = [];
var len = a.length;
var pos = 0;
while(pos < len){
pos = a.indexOf(b,pos) // 從索引0的地方查找元素
if(pos === -1) break;
results.push(pos)
pos = pos + 1
}
console.log(results) // => 輸出 [8]
return results;
}
findall(c,6)
複製代碼
(6)數組類型檢測:ES5新增方法 isArray()
Array.isArray([]) // =>true
Array.isArray({}) // =>false
複製代碼