對數組中每一項進行給定函數,若是每一項都返回true,則返回true。前端
every(callback(element,index,array), thisArg)
var numbers = [1,2,3,4,5,4,3,2,1]; var everyResult = numbers.every(function(item,index,array){ return item>2; }); console.log(everyResult); //false
var numbers = [1,2,3,4,5,4,3,2,1]; var obj = {num:2} var everyResult = numbers.every(function(item,index,array){ return item>this.num; },obj); console.log(everyResult); //false
特別說明:
第一個參數是回調函數,第二個參數是一個對象,它能夠重置回調函數中this的指向。那麼,上述代碼中回調函數的this就指向obj,因而this.num值等於2。數組
對數組中每一項進行給定函數,若是任意一項都返回true,則返回true函數
some(callback(element,index,array), thisArg)
var numbers = [1,2,3,4,5,4,3,2,1]; var someResult = numbers.some(function(item,index,array){ return item>2; }); console.log(someResult); //true var numbers = [1,2,3,4,5,4,3,2,1]; var obj = {num:2} var someResult = numbers.some(function(item,index,array){ return item>this.num; },obj); console.log(someResult); //true
對數組中每一項進行給定函數,返回該函數會返回true的項組成新的數組。this
filter(callback(element,index,array), thisArg)
var numbers = [1,2,3,4,5,4,3,2,1]; var filterResult = numbers.filter(function(item,index,array){ return item>2; }); console.log(filterResult); // [3,4,5,4,3]
var numbers = [1,2,3,4,5,4,3,2,1]; var obj = {num:2} var filterResult = numbers.filter(function(item,index,array){ return item>this.num; },obj); console.log(filterResult); // [3,4,5,4,3]
對數組中每一項進行給定函數,返回每次函數調用的結果組成的新數組。code
map(callback(element,index,array), thisArg)
var numbers = [1,2,3,4,5,4,3,2,1]; var mapResult = numbers.map(function(item,index,array){ return item*2; }); alert(mapResult); // [2, 4, 6, 8, 10, 8, 6, 4, 2]
var numbers = [1,2,3,4,5,4,3,2,1]; var obj = {num:2} var mapResult = numbers.map(function(item,index,array){ return item*this.num; },obj); alert(mapResult); // [2, 4, 6, 8, 10, 8, 6, 4, 2]
對數組中每一項進行給定函數,沒有返回值,和for循環相似。對象
forEach(callback(element,index,array), thisArg)
var numbers = [1,2,3,4,5,4,3,2,1]; numbers.forEach(function(item,index,array){ console.log(item*2) }); //2, 4, 6, 8, 10, 8, 6, 4, 2 console.log(numbers) //1,2,3,4,5,4,3,2,1
var numbers = [1,2,3,4,5,4,3,2,1]; var obj = {num:2} numbers.forEach(function(item,index,array){ console.log(item*this.num) },obj); //2, 4, 6, 8, 10, 8, 6, 4, 2
ES5新增了兩個歸併數組的方法:reduce(callback(prev,cur,index,array))和reduceRight(callback(prev,cur,index,array))。這兩個方法迭代數組全部項,而後構建一個最終返回的值。reduce從左到右,reduceRight從右到左。排序
var numbers = [1,2,3,4,5]; var sum = numbers.reduce(function(prev,cur,index,array){ return prev + cur; }); console.log(sum); //15
這個函數返回的任何值都會做爲第一個參數自動傳給下一項。第一次迭代發生在第二項上,所以第一個參數是數組的第一項,第二個參數是數組的第二項。索引
ES3的方法接口
var numbers = [1,2,3]; if(numbers instanceof Array){ //對數組進行某些操做 }
ES5的方法隊列
var numbers = [1,2,3]; if(Array.isArray(numbers)){ //對數組進行某些操做 }
var numbers = [1,2,3]; console.log(numbers.toLocaleString()) //1,2,3 console.log(numbers.toString())//1,2,3
將數組轉換爲字符串,且用分隔符分割
var numbers = [1,2,3]; alert(numbers.join("|")); // 1|2|3
棧方法是指Last-In-First-Out後進先出
push() 從數組末尾添加 pop() 從數組末尾移除
隊列方法是First-In-First-Out先進先出
shift() 從數組前端移除 unshift() 從數組前端添加
反轉數組
var numbers = [1,2,3]; console.log(numbers.reverse()) //3,2,1
var numbers = [0,1,5,10,15]; numbers.sort(function(a,b){ return b-a; }); console.log(numbers); //[15, 10, 5, 1, 0]
用於複製或者從尾部添加,建立新數組。
concat(n1,n2,...,nN)
var numbers = [1,2,3]; var n1 = values.concat(); //複製 var n2 = values.concat(4); //尾部添加 var n3 = n1.concat(n2,10,11); //尾部添加 console.log(numbers); //[1,2,3] console.log(n1); //[1,2,3] console.log(n2); //[1,2,3,4] console.log(n3); //[1, 2, 3, 1, 2, 3, 4,10,11]
用於複製或截取數組,建立新數組。
slice(start,end)
var numbers = [1,2,3]; var n1 = numbers.slice(); //複製 var n2 = numbers.slice(1); //截取 var n3 = numbers.slice(1,3); //截取 console.log(numbers); //[1,2,3] console.log(n1); //[1,2,3] console.log(n2); //[2,3] console.log(n3); //[2,3]
用於刪除、插入、替換,號稱最強大的數組方法
splice(start,num) var values = [1,2,3,4,5,6]; var v = values.splice(0,2); console.log(values); //[3,4,5,6] console.log(v); //[1,2]
splice(start,num,n1,n2,...,nN) //插入demo var values = [1,2,3,4,5,6]; var v1 = values.splice(1,0,1,1,1); console.log(values); //[1,1,1,1,2,3,4,5,6] console.log(v1); //[] //替換demo var values = [1,2,3,4,5,6]; var v1 = values.splice(1,2,1,1,1); console.log(values); //[1,1,1,1,4,5,6] console.log(v1); //[2,3]
indexOf(value,start) lastIndexOf(value,start)
都接受兩個參數:查找的值、查找起始位置。不存在,返回 -1 ;存在,返回位置。
indexOf 是從前日後查找, lastIndexOf 是從後往前查找。
var numbers = [1,2,3,4,5,6,7,8,9,5,3]; console.log(numbers.indexOf(5)) //4 console.log(numbers.lastIndexOf(5)) //9
傳入一個回調函數,找到數組中符合當前搜索規則的第一個元素,返回它,而且終止搜索。
find(callback(element,index,array), thisArg)
let arr = [2,3,4,5,6,7,8,9,10]; let elem=arr.find(function (ele) { if (ele > 4) { return true } }) console.log(elem); //5
let arr = [2,3,4,5,6,7,8,9,10]; let obj = {num: 4}; let elem=arr.find(function (ele) { if (ele > this.num) { return true } },obj) console.log(elem); //5
傳入一個回調函數,找到數組中符合當前搜索規則的第一個元素,返回它的下標,終止搜索。
findIndex(callback(element,index,array), thisArg)
let arr = [2,3,4,5,6,7,8,9,10]; let elem=arr.findIndex(function (ele) { if (ele > 4) { return true } }) console.log(elem); //3
let arr = [2,3,4,5,6,7,8,9,10]; let obj = {num: 4}; let elem=arr.findIndex(function (ele) { if (ele > this.num) { return true } },obj) console.log(elem); //3
用新元素替換掉數組內的元素,能夠指定替換下標範圍。
fill(value,start,end)
const arr = ['a', 'b', 'c', 'd'] console.log(arr.fill('ss', 1, 3)) // ["a", "ss", "ss", "d"] const arr2 = ['a', 'b', 'c', 'd'] console.log(arr.fill('ss')) // ["ss", "ss", "ss", "ss"]
判斷數組中是否存在該元素,能夠替換 ES5 時代的 indexOf 判斷方式。
includes(value,start)
let arr = ['a', 'b','c', 'd', NaN] arr.includes('a') //true arr.includes(NaN) //true arr.indexOf(NaN) //-1
方法能夠將指定的參數轉換爲真正的數組。固然並非任意參數都是能夠被轉換爲數組,能夠轉換的參數以下:類數組對象、具備遍歷器接口的對象。
Array.from(arrayLike, mapFn, thisArg)
let obj = { "0": "螞蟻部落", "1": "www.softwhy.com", "2": 6, "3":"ES2015", length:4 }; console.log(Array.from(obj)); // ["螞蟻部落", "www.softwhy.com", 6, "ES2015"] obj = { "a": "螞蟻部落", "b": "www.softwhy.com", "c": 6, "d":"ES2015", length:4 }; console.log(Array.from(obj)); //[undefined, undefined, undefined, undefined] obj = { length:3 }; console.log(Array.from(obj)); //[undefined, undefined, undefined]
上述代碼將類數組對象轉換爲真正的數組,什麼是類數組對象:不少材料上對類數組的描述比較嚴苛,其實很簡單,只要一個對象具備length屬性就是類數組。固然一個類數組對象,若是屬性剛好相似於數組遞增式索引,那就更好了,好比上面代碼中的對象。上面對象只有一個length屬性,他也是一個類數組對象,只不過生成的數組元素都是undefined。
let str = "螞蟻部落"; console.log(Array.from(str)); // ["螞", "蟻", "部", "落"]
由於字符串具備遍歷器接口,那麼字符串也能夠生成數組,數組的每個元素,就是構成字符串的字符。
let obj = { "0": 1, "1": 2, "2": 3, "3": 4, length:4 }; let thisObj = { num:2 } console.log(Array.from(obj, function (elem, index) { return elem * this.num }, thisObj)); //[2, 4, 6, 8]
擴展:展開運算符生成數組
let str="螞蟻部落"; console.log([...str]); //["螞", "蟻", "部", "落"]
Array.of(element0,element1,...,elementN)
此方法能夠接受任意類型的參數,參數之間用逗號分隔,而且可以將參數轉換爲數組。
console.log(Array.of(2)); //[2] console.log(Array.of(2,3,4)); //[2,3,4]
擴展:Array()與Array.of()方法區別
console.log(Array(2)) // [undefined, undefined] console.log(Array.of(2)) // [2] console.log(Array(2,3,4)) // [2,3,4] console.log(Array.of(2,3,4)) // [2,3,4]
這個方法的主要目的,是彌補數組構造函數 Array() 的不足。
返回迭代器:返回一個遍歷器對象【鍵值對】
//數組 const arr = ['a', 'b', 'c']; for(let v of arr.entries()) { console.log(v) } // [0, 'a'] [1, 'b'] [2, 'c'] for(let [key, value] of arr.entries()) { console.log(key+'--'+value) } //0--a 1--b 2--c //Set const arr = new Set(['a', 'b', 'c']); for(let v of arr.entries()) { console.log(v) } // ['a', 'a'] ['b', 'b'] ['c', 'c'] //Map const arr = new Map(); arr.set('a', 'a'); arr.set('b', 'b'); for(let v of arr.entries()) { console.log(v) } // ['a', 'a'] ['b', 'b']
返回迭代器:返回鍵值對的key
//數組 const arr = ['a', 'b', 'c']; for(let v of arr.keys()) { console.log(v) } // 0 1 2 //Set const arr = new Set(['a', 'b', 'c']); for(let v of arr.keys()) { console.log(v) } // 'a' 'b' 'c' //Map const arr = new Map(); arr.set('a', 'a'); arr.set('b', 'b'); for(let v of arr.keys()) { console.log(v) } // 'a' 'b'
返回迭代器:返回鍵值對的value
//數組 const arr = ['a', 'b', 'c']; for(let v of arr.values()) { console.log(v) } //'a' 'b' 'c' //Set const arr = new Set(['a', 'b', 'c']); for(let v of arr.values()) { console.log(v) } // 'a' 'b' 'c' //Map const arr = new Map(); arr.set('a', 'a'); arr.set('b', 'b'); for(let v of arr.values()) { console.log(v) }