Array數(shù)組對(duì)象是用于構(gòu)造數(shù)組的全局對(duì)象; 它是高階,類似列表的對(duì)象。
我們可以創(chuàng)建一個(gè)數(shù)組
var array = new Array();
var array = new Array(20);//數(shù)組的成員數(shù)量20
或
var array = new Array(20)
var arrs = ["1","2"];
arrs.length();//數(shù)組的長(zhǎng)度
#可以通過(guò)索引訪問(wèn)數(shù)組元素
arrs[0]//結(jié)果1
#創(chuàng)建一個(gè)空數(shù)組
var arr = [];
遍歷一個(gè)數(shù)組(常用)
- forEach 方法
var arrs = ["aaa","bbb"];
arrs.forEach(function (item, index, array) {
console.log(item, index);
//aaa 0
//bbb 1
});
- for( ; ; ){}
for(var i=0;i< arrs.length;i++){
console.log(arrs[i]);
}
- for in 方法
for(var i in arrs){
console.log(arrs[i]);
}
- for of 方法
for(var value of arrs){
console.log(value);
}
- map() :方法創(chuàng)建一個(gè)新數(shù)組,其結(jié)果是該數(shù)組中的每個(gè)元素都調(diào)用一個(gè)提供的函數(shù)后返回的結(jié)果
let array = arr.map(function callback(currentValue, index, array) {
// Return element for new_array
}[, thisArg])
方法會(huì)將其傳入三個(gè)參數(shù),分別是`currentValue`當(dāng)前成員、`index `當(dāng)前位置和`array `數(shù)組本身
var numbers = [1, 2, 3];
numbers.map(function (n) {
return n + 1;
});
// [2, 3, 4]
- 如何判斷是否為數(shù)組
var arr = [1,2,3];
#判斷方法
typeof arr // "object"
Array.isArray(arr) // true
Array實(shí)例方法
- Array.from() :方法從一個(gè)類似數(shù)組或可迭代的對(duì)象中創(chuàng)建一個(gè)新的數(shù)組實(shí)例。
var arrs = ["a","b","c"];
Array.from(arrs);//["a","b","c"]
Array.from("welcome");
//[ 'w', 'e', 'l', 'c', 'o', 'm', 'e' ]
Array.from("123456789")
//[ '1', '2', '3', ',', '4', '5', '6', '7', '8', '9' ]
var setArr = new Set(["sss","aaa"])
console.log(Array.from(setArr))
//[ 'sss', 'aaa' ]
var mrr = new Map([[1, 2], [2, 4], [4, 8]]);
Array.from(mrr);
// [[1, 2], [2, 4], [4, 8]]
#from的functions方法
Array.from([1, 2, 3], x => x + x);
//[2, 4, 6]
Array.from({length: 5}, (v, i) => i);
// [0, 1, 2, 3, 4]
- valueOf() :方法返回?cái)?shù)組本身
var arrs = ["aaa","bbb"];
arrs.valueOf();
- toString() :此方法返回?cái)?shù)組的字符串形式
var arrs = ["a","b","c"];
arrs.toString();//"a,b,c"
var arrs = ["a","b","c",[1,2,3]];
console.log(arrs.toString())
//a,b,c,1,2,3
- Array.of() :方法創(chuàng)建一個(gè)具有可變數(shù)量參數(shù)的新數(shù)組實(shí)例,而不考慮參數(shù)的數(shù)量或類型
Array.of()
和Array
構(gòu)造函數(shù)之間的區(qū)別在于處理整數(shù)參數(shù):Array.of(7) 創(chuàng)建一個(gè)具有單個(gè)元素 7 的數(shù)組,而 Array(7) 創(chuàng)建一個(gè)包含 7 個(gè)undefined
元素的數(shù)組。
Array.of(7); // [7]
Array.of(1, 2, 3); // [1, 2, 3]
# 對(duì)比
Array(7); // [ , , , , , , ]
Array(1, 2, 3); // [1, 2, 3]
- concat() :方法用于合并兩個(gè)或多個(gè)數(shù)組。此方法不會(huì)更改現(xiàn)有數(shù)組,而是返回一個(gè)新數(shù)組
let arr1 = ["a", "b", "c"];
let arr2 = ["d", "e", "f"];
let arr3 = arr1.concat(arr2);
#結(jié)果["a","b","c","d", "e", "f"]
- copyWithin() :方法淺復(fù)制數(shù)組的一部分到同一數(shù)組中的另一個(gè)位置,并返回它,而不修改其大小
arr.copyWithin(target)
arr.copyWithin(target, start)
arr.copyWithin(target, start, end)
arr.copyWithin(目標(biāo)索引, [源開始索引], [結(jié)束源索引])
target
0 為基底的索引,復(fù)制序列到該位置。如果是負(fù)數(shù),target 將從末尾開始計(jì)算。
如果 target 大于等于 arr.length,將會(huì)不發(fā)生拷貝。如果 target 在 start 之后,復(fù)制的序列將被修改以符合 arr.length。
start
0 為基底的索引,開始復(fù)制元素的起始位置。如果是負(fù)數(shù),start 將從末尾開始計(jì)算。
如果 start 被忽略,copyWithin 將會(huì)從0開始復(fù)制。
end
0 為基底的索引,開始復(fù)制元素的結(jié)束位置。copyWithin 將會(huì)拷貝到該位置,但不包括 end 這個(gè)位置的元素。如果是負(fù)數(shù), end 將從末尾開始計(jì)算。
如果 end 被忽略,copyWithin 將會(huì)復(fù)制到 arr.length。
[1, 2, 3, 4, 5].copyWithin(-2);
// [1, 2, 3, 1, 2]
[1, 2, 3, 4, 5].copyWithin(0, 3);
// [4, 5, 3, 4, 5]
[1, 2, 3, 4, 5].copyWithin(0, 3, 4);
// [4, 2, 3, 4, 5]
[1, 2, 3, 4, 5].copyWithin(-2, -3, -1);
// [1, 2, 3, 3, 4]
[1, 2, 3, 4, 5].copyWithin(2, 1, 3)
//[1,2,2,3,5]
- push() :方法用于在數(shù)組的末端添加一個(gè)或多個(gè)元素,并返回添加新元素后的數(shù)組長(zhǎng)度。注意,該方法會(huì)改變?cè)瓟?shù)組。
var numbers = [1, 2, 3];
numbers.push(4);
console.log(numbers);
// [1, 2, 3, 4]
#合并兩個(gè)數(shù)組
var a = [1,2,3,4];
var b = [5,6];
a.push.apply(a,b)
//[1,2,3,4,5,6]
-
pop() :方法用于刪除數(shù)組的最后一個(gè)元素,并返回該元素。注意,此方法更改數(shù)組的長(zhǎng)度,如果你在一個(gè)空數(shù)組上調(diào)用
pop()
,它返回undefined
let a = [1, 2, 3];
a.length; // 3
#刪除最后一個(gè)元素
a.pop(); // 3
push和pop結(jié)合使用,就構(gòu)成了“后進(jìn)先出”的棧結(jié)構(gòu)(stack)
-
join() :方法將數(shù)組(或一個(gè)
類數(shù)組對(duì)象
)的所有元素連接到一個(gè)字符串中
let a = ['1', '2', '3'];
a.join();
//默認(rèn)為 ","
//"1,2,3"
a.join("");
// 分隔符 === 空字符串 ""
// "123"
a.join("-");
//"1-2-3"
若數(shù)組成員存在undefined或null或空位,會(huì)被轉(zhuǎn)成空字符串
[undefined, null].join('-')
// '-'
['1',, '2'].join('-')
// '1--2'
也可以通過(guò)call
方法用于字符串
Array.prototype.join.call('hello', '-')
// "h-e-l-l-o"
var obj = { 0: 'a', 1: 'b', length: 2 };
Array.prototype.join.call(obj, '-')
// 'a-b'
- shift() :方法用于刪除數(shù)組的第一個(gè)元素,并返回該元素。注意,該方法會(huì)改變?cè)瓟?shù)組
shift
方法移除索引為 0 的元素(即第一個(gè)元素),并返回被移除的元素,其他元素的索引值隨之減 1。如果length
屬性的值為 0 (長(zhǎng)度為 0),則返回undefined
let myFish = ['1', '2', '3', '4'];
myFish.shift();
// ['2', '3', '4']
shift
方法可以遍歷并清空一個(gè)數(shù)組
var list = [1, 2, 3];
var ite;
while (ite = list.shift()) {
console.log(ite);
}
// 結(jié)果list:[]
- unshift() :方法將一個(gè)或多個(gè)元素添加到數(shù)組的開頭,并返回新數(shù)組的長(zhǎng)度
let a = [1, 2, 3];
a.unshift(4, 5);//添加
// [4, 5, 1, 2, 3]
- reverse() :方法將數(shù)組中元素的位置顛倒
var myArray = ['1', '2', '3'];
myArray.reverse();
// ['3', '2', '1']
-
slice() :方法返回一個(gè)從
開始
到結(jié)束
(不包括結(jié)束
)選擇的數(shù)組的一部分淺拷貝
到一個(gè)新數(shù)組對(duì)象。原始數(shù)組不會(huì)被修改。
arr.slice();//[0,end]
arr.slice(begin);//[begin,end]
arr.slice(begin,end)://[begin,end)
它的第一個(gè)參數(shù)begin
為起始位置(從0開始),第二個(gè)參數(shù)end
為終止位置(但該位置的元素本身不包括在內(nèi))。如果省略第二個(gè)參數(shù),則一直返回到原數(shù)組的最后一個(gè)成員
var arr = ['a', 'b', 'c'];
arr.slice(1) // ["b", "c"]
arr.slice(1, 2) // ["b"]
arr.slice(2, 7) // ["c"],7已經(jīng)超過(guò)數(shù)組的length
arr.slice() // ["a", "b", "c"]
如果是負(fù)數(shù)則表示倒數(shù)計(jì)算位置
arr.slice(-2) // ["b", "c"]
slice
方法的一個(gè)重要應(yīng)用,是將類似數(shù)組的對(duì)象轉(zhuǎn)為真正的數(shù)組
Array.prototype.slice.call({ 0: 'a', 1: 'b', length: 2 })
// ['a', 'b']
或者
function list() {
return Array.prototype.slice.call(arguments);
}
var list1 = list(1, 2, 3); // [1, 2, 3]
- splice() :方法通過(guò)刪除現(xiàn)有元素和/或添加新元素來(lái)更改一個(gè)數(shù)組的內(nèi)容
array.splice(start)
array.splice(start, deleteCount)
array.splice(start, deleteCount, item1, item2, ...)
splice:第一個(gè)參數(shù)是刪除的起始位置,第二個(gè)參數(shù)是被刪除的元素個(gè)數(shù)。
如果后面還有更多的參數(shù),則表示這些就是要被插入數(shù)組的新元素。
# 起始位置如果是負(fù)數(shù),就表示從倒數(shù)位置開始刪除
var arr = ['a', 'b', 'c', 'd', 'e', 'f'];
arr.splice(4, 2) // arr:["a", "b", "c", "d"]
arr.splice(4,2,1,2)//arr:["a", "b", "c", "d",1,2]
- sort() :方法在適當(dāng)?shù)奈恢脤?duì)數(shù)組的元素進(jìn)行排序,并返回?cái)?shù)組。 sort 排序不一定是穩(wěn)定的。默認(rèn)排序順序是根據(jù)字符串Unicode碼點(diǎn)
var fruit = ['cherries', 'apples', 'bananas'];
fruit.sort();
// ['apples', 'bananas', 'cherries']
var scores = [1, 10, 21, 2];
scores.sort();
// [1, 10, 2, 21]
// 注意10在2之前,
// 因?yàn)樵?Unicode 指針順序中"10"在"2"之前
var things = ['word', 'Word', '1 Word', '2 Words'];
things.sort();
// ['1 Word', '2 Words', 'Word', 'word']
// 在Unicode中, 數(shù)字在大寫字母之前,
// 大寫字母在小寫字母之前.
sort可以按照自定義的方式排序,可以傳入一個(gè)函數(shù)作為參數(shù)
[10111, 1101, 111].sort(function (a, b) {
return a - b;
})
// [111, 1101, 10111]
-
filter() :方法創(chuàng)建一個(gè)新數(shù)組, 其包含通過(guò)所提供函數(shù)實(shí)現(xiàn)的測(cè)試的所有元素,參數(shù)函數(shù)可以接受三個(gè)參數(shù),第一個(gè)
elem
參數(shù)是當(dāng)前數(shù)組成員的值,這是必需的,后兩個(gè)參數(shù)是可選的,分別是當(dāng)前數(shù)組成員的位置index
和整個(gè)數(shù)組arr
filter(function (elem, index, arr) {...do somthing...})
function isBigEnough(value) {
return value >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
//[12, 130, 44]
[1, 2, 3, 4, 5].filter(function (item) {
return (item > 4);
})
// [5]
- some() :方法測(cè)試數(shù)組中的某些元素是否通過(guò)由提供的函數(shù)實(shí)現(xiàn)的測(cè)試
const asd = (element, index, array) => {
return element > 10;
}
[2, 5, 8, 1, 4].some(asd);//false
[2, 5, 8, 1, 40].some(asd);//true
every() :方法測(cè)試數(shù)組的所有元素是否都通過(guò)了指定函數(shù)的測(cè)試,類似
some()
reduce() :方法對(duì)累加器和數(shù)組中的每個(gè)元素 (從左到右)應(yīng)用一個(gè)函數(shù),將其減少為單個(gè)值
var total = [0, 1, 2, 3].reduce(function(item, value) {
return item + value;
}, 0);
// total is 6
- reduceRight() :方法接受一個(gè)函數(shù)作為累加器(accumulator)和數(shù)組的每個(gè)值(從右到左)將其減少為單個(gè)值
let flattened = [[0, 1], [2, 3], [4, 5]].reduceRight((a, b) => {
return a.concat(b);
}, []);
// flattened is [4, 5, 2, 3, 0, 1]
-
indexOf(),lastIndexOf():
indexOf
方法返回給定元素在數(shù)組中第一次出現(xiàn)的位置,如果沒(méi)有出現(xiàn)則返回-1
let a = [2, 9, 7, 8, 9];
a.indexOf(2); // 0
a.indexOf(6); // -1
lastIndexOf
方法返回給定元素在數(shù)組中最后一次出現(xiàn)的位置,如果沒(méi)有出現(xiàn)則返回-1
var array = [2, 5, 9, 2];
var index = array.lastIndexOf(2);
// index is 3
index = array.lastIndexOf(7);
// index is -1
-
find() :方法返回?cái)?shù)組中滿足提供的測(cè)試函數(shù)的第一個(gè)元素的值。否則返回
undefined
function isBigEnough(element) {
return element >= 15;
}
[12, 5, 8, 130, 44].find(isBigEnough); // 130
- findIndex() :方法返回?cái)?shù)組中滿足提供的測(cè)試函數(shù)的第一個(gè)元素的索引。否則返回-1
function isBigEnough(element) {
return element >= 15;
}
[12, 5, 8, 130, 44].findIndex(isBigEnough); // 3
- toLocaleString() :返回一個(gè)字符串表示數(shù)組中的元素。數(shù)組中的元素將使用各自的 toLocaleString 方法轉(zhuǎn)成字符串,這些字符串將使用一個(gè)特定語(yǔ)言環(huán)境的字符串(例如一個(gè)逗號(hào) ",")隔開
var number = 1668;
var date = new Date();
var arr = [number, date, "welcome"];
var str = arr.toLocaleString();
console.log(str);
// 輸出 "1,668,2017/8/15 下午8:32:24, welcome"
// 假定運(yùn)行在中文(zh-CN)環(huán)境,北京時(shí)區(qū)
- includes() :方法用來(lái)判斷一個(gè)數(shù)組是否包含一個(gè)指定的值,如果是,酌情返回 true或 false
arr.includes(searchElement)
arr.includes(searchElement, fromIndex)
searchElement
需要查找的元素值
fromIndex
從該索引處開始查找 searchElement。如果為負(fù)值,則按升序從 array.length + fromIndex 的索引開始搜索。默認(rèn)為 0。
et a = [1, 2, 3];
a.includes(2);
// true
a.includes(5);
// false
- fill() :方法用一個(gè)固定值填充一個(gè)數(shù)組中從起始索引到終止索引內(nèi)的全部元素
arr.fill(value)
arr.fill(value, start)
arr.fill(value, start, end)
value
用來(lái)填充數(shù)組元素的值start
起始索引,默認(rèn)值為0end
終止索引,默認(rèn)值為 this.length
var numbers = [1, 2, 3]
numbers.fill(1);
// results in [1, 1, 1]