溫習(xí)javascript之Array的使用

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)值為0 end 終止索引,默認(rèn)值為 this.length

var numbers = [1, 2, 3]
numbers.fill(1);
// results in [1, 1, 1]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評(píng)論 6 540
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,275評(píng)論 3 428
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,368評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,736評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,919評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,481評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,235評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,427評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,656評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評(píng)論 1 294
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,160評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,380評(píng)論 2 379

推薦閱讀更多精彩內(nèi)容