JavaScript數(shù)組方法

一、基礎(chǔ)添加和刪除方法 push(),pop(),unshift(),shift()

  1. push(element1, ..., elementN)
    將一個(gè)或多個(gè)元素添加到數(shù)組的末尾傻丝,并返回該數(shù)組的新長(zhǎng)度
// 添加一個(gè)元素
> arr.push(1)
< 1  // 返回?cái)?shù)組長(zhǎng)度
// 添加多個(gè)元素
> arr.push(1,2,3)
<4
arr
(4) [1, 1, 2, 3]  // 會(huì)改變?cè)瓟?shù)組值
  1. pop()
    從數(shù)組中刪除最后一個(gè)元素羞迷,并返回該元素的值(當(dāng)數(shù)組為空時(shí)返回undefined矾睦。此方法更改數(shù)組的長(zhǎng)度勾栗。
  2. unshift(element1, ..., elementN)
    將一個(gè)或多個(gè)元素添加到數(shù)組的開頭苍苞,并返回該數(shù)組的新長(zhǎng)度(該方法修改原有數(shù)組)狰晚。
  3. shift()
    從數(shù)組中刪除第一個(gè)元素筒饰,并返回該元素的值,如果數(shù)組為空則返回undefined。此方法更改數(shù)組的長(zhǎng)度壁晒。

二瓷们、進(jìn)階splice(),可進(jìn)行刪除秒咐、添加和替換

  • splice(start[, deleteCount[, item1[, item2[, ...]]]])
    通過刪除或替換現(xiàn)有元素或者原地添加新的元素來修改數(shù)組,并以數(shù)組形式返回被修改的內(nèi)容谬晕。此方法會(huì)改變?cè)瓟?shù)組。返回被刪除的元素組成的一個(gè)數(shù)組携取。
    參數(shù):
    • start: 指定修改的開始位置(從0計(jì)數(shù))攒钳。如果超出了數(shù)組的長(zhǎng)度,則從數(shù)組末尾開始添加內(nèi)容歹茶;如果是負(fù)值夕玩,則表示從數(shù)組末位開始的第幾位。
    • deleteCount(可選):整數(shù)惊豺,表示要移除的數(shù)組元素的個(gè)數(shù)燎孟。
      如果 deleteCount 被省略了,或者它的值大于等于array.length - start(也就是說尸昧,如果它大于或者等于start之后的所有元素的數(shù)量)揩页,那么start之后數(shù)組的所有元素都會(huì)被刪除。
      如果 deleteCount 是 0 或者負(fù)數(shù)烹俗,則不移除元素爆侣。
    • itemN: 要添加進(jìn)數(shù)組的元素,從start 位置開始萍程。如果不指定,則 splice() 將只刪除數(shù)組元素兔仰。

三茫负、數(shù)組排序sort([compareFunction(a, b)])

對(duì)數(shù)組的元素進(jìn)行排序,并返回?cái)?shù)組乎赴。默認(rèn)排序順序是在將元素轉(zhuǎn)換為字符串忍法,然后比較它們的Unicode位點(diǎn)進(jìn)行排序。會(huì)改變?cè)瓟?shù)組榕吼。
參數(shù):
compareFunction(可選):用來指定按某種順序進(jìn)行排列的函數(shù)饿序。

  • 如果 compareFunction(a, b) 小于 0 ,那么 a 會(huì)被排列到 b 之前羹蚣;
  • 如果 compareFunction(a, b) 等于 0 原探, a 和 b 的相對(duì)位置不變;
  • 如果 compareFunction(a, b) 大于 0 顽素, b 會(huì)被排列到 a 之前咽弦。
// 對(duì)象可以按照某個(gè)屬性排序:
var items = [
  { name: 'Edward', value: 21 },
  { name: 'Sharpe', value: 37 },
  { name: 'And', value: 45 },
  { name: 'The', value: -12 },
  { name: 'Magnetic' },
  { name: 'Zeros', value: 37 }
];

// sort by value
items.sort(function (a, b) {
  return (a.value - b.value)
});

// sort by name
items.sort(function(a, b) {
  var nameA = a.name.toUpperCase(); // ignore upper and lowercase
  var nameB = b.name.toUpperCase(); // ignore upper and lowercase
  if (nameA < nameB) {
    return -1;
  }
  if (nameA > nameB) {
    return 1;
  }
  // names must be equal
  return 0;
});

四、其他常用方法

  1. concat(value1[, value2[, ...[, valueN]]])
    用于合并兩個(gè)或多個(gè)數(shù)組戈抄。此方法不會(huì)更改現(xiàn)有數(shù)組离唬,而是返回一個(gè)新數(shù)組。
  2. join([separator])
    將一個(gè)數(shù)組的所有元素連接成一個(gè)字符串并返回這個(gè)字符串划鸽。如果數(shù)組只有一個(gè)項(xiàng)目输莺,那么將返回該項(xiàng)目而不使用分隔符。
    參數(shù):
    • separator(可選):
      指定一個(gè)字符串來分隔數(shù)組的每個(gè)元素裸诽。如果缺省該值嫂用,數(shù)組元素用逗號(hào)(,)分隔。如果separator是空字符串("")丈冬,則所有元素之間都沒有任何字符嘱函。
  3. reverse()
    將數(shù)組中元素的位置顛倒,并返回該數(shù)組埂蕊。該方法會(huì)改變?cè)瓟?shù)組往弓。
  4. indexOf(searchElement[, fromIndex])
    返回在數(shù)組中可以找到一個(gè)給定元素的第一個(gè)索引,如果不存在蓄氧,則返回-1
    • searchElement:要查找的元素
    • fromIndex (可選):開始查找的位置函似。如果該索引值大于或等于數(shù)組長(zhǎng)度,意味著不會(huì)在數(shù)組里查找喉童,返回-1撇寞。如果參數(shù)中提供的索引值是一個(gè)負(fù)值,則將其作為數(shù)組末尾的一個(gè)抵消,即-1表示從最后一個(gè)元素開始查找蔑担,-2表示從倒數(shù)第二個(gè)元素開始查找 牌废,以此類推。
  5. lastIndexOf(searchElement[, fromIndex])
    返回指定元素(也即有效的 JavaScript 值或變量)在數(shù)組中的最后一個(gè)的索引啤握,如果不存在則返回 -1鸟缕。從數(shù)組的后面向前查找,從 fromIndex 處開始恨统。
  6. slice([begin[, end]])
    返回一個(gè)新的數(shù)組對(duì)象叁扫,這一對(duì)象是一個(gè)由 begin 和 end 決定的原數(shù)組的淺拷貝(包括 begin三妈,不包括end)畜埋。原始數(shù)組不會(huì)被改變。

五畴蒲、要提供函數(shù)作為參數(shù)的方法

  1. filter()
    返回一個(gè)新數(shù)組, 其包含通過所提供函數(shù)實(shí)現(xiàn)的測(cè)試的所有元素悠鞍。
    用來測(cè)試數(shù)組的每個(gè)元素的函數(shù),返回 true 表示該元素通過測(cè)試模燥,保留該元素咖祭,false 則不保留。它接受以下三個(gè)參數(shù):
    • element
      數(shù)組中當(dāng)前正在處理的元素蔫骂。
    • index可選
      正在處理的元素在數(shù)組中的索引么翰。
    • array可選
      調(diào)用了 filter 的數(shù)組本身。
  2. find() findIndex()
    返回?cái)?shù)組中滿足提供的測(cè)試函數(shù)的第一個(gè)元素的值辽旋。否則返回 undefined浩嫌。
  3. map()
    創(chuàng)建一個(gè)新數(shù)組,其結(jié)果是該數(shù)組中的每個(gè)元素是調(diào)用一次提供的函數(shù)后的返回值补胚。
var numbers = [1, 4, 9];
var doubles = numbers.map(function(num) {
  return num * 2;
});
// doubles數(shù)組的值為: [2, 8, 18]
// numbers數(shù)組未被修改: [1, 4, 9]
  1. reduce() reduceRight()
    對(duì)數(shù)組中的每個(gè)元素執(zhí)行一個(gè)由您提供的reducer函數(shù)(升序執(zhí)行)码耐,將其結(jié)果匯總為單個(gè)返回值。
    reducer 函數(shù)接收4個(gè)參數(shù):
    • Accumulator (acc) (累計(jì)器)
    • Current Value (cur) (當(dāng)前值)
    • Current Index (idx) (當(dāng)前索引)
    • Source Array (src) (源數(shù)組)
      reducer 函數(shù)的返回值分配給累計(jì)器溶其,該返回值在數(shù)組的每個(gè)迭代中被記住骚腥,并最后成為最終的單個(gè)結(jié)果值。
// 累加器
const array1 = [1, 2, 3, 4];
const reducer = (accumulator, currentValue) => accumulator + currentValue;
// 1 + 2 + 3 + 4
  1. forEach()
    對(duì)數(shù)組的每個(gè)元素執(zhí)行一次給定的函數(shù)瓶逃。
    除了拋出異常以外束铭,沒有辦法中止或跳出 forEach() 循環(huán)。
  2. every()
    測(cè)試一個(gè)數(shù)組內(nèi)的所有元素是否都能通過某個(gè)指定函數(shù)的測(cè)試厢绝。它返回一個(gè)布爾值契沫。若收到一個(gè)空數(shù)組,此方法在一切情況下都會(huì)返回 true代芜。
  3. flatMap()
    首先使用映射函數(shù)映射每個(gè)元素埠褪,然后將結(jié)果壓縮成一個(gè)新數(shù)組。
var arr1 = [1, 2, 3, 4];

arr1.map(x => [x * 2]);
// [[2], [4], [6], [8]]

arr1.flatMap(x => [x * 2]);
// [2, 4, 6, 8]

// only one level is flattened
arr1.flatMap(x => [[x * 2]]);
// [[2], [4], [6], [8]]
  1. some()
    測(cè)試數(shù)組中是不是至少有1個(gè)元素通過了被提供的函數(shù)測(cè)試,至少一個(gè)元素通過回調(diào)函數(shù)的測(cè)試就會(huì)返回true钞速。
    如果用一個(gè)空數(shù)組進(jìn)行測(cè)試贷掖,在任何情況下它返回的都是false。

六渴语、其他方法

  1. copyWithin(target[, start[, end]])
    淺復(fù)制數(shù)組的一部分到同一數(shù)組中的另一個(gè)位置苹威,并返回它,不會(huì)改變?cè)瓟?shù)組的長(zhǎng)度驾凶。
    參數(shù):
    • target
      從0開始的索引牙甫,復(fù)制序列到該位置。如果是負(fù)數(shù)调违,target 將從末尾開始計(jì)算窟哺。
      如果 target 大于等于 arr.length,將會(huì)不發(fā)生拷貝技肩。如果 target 在 start 之后且轨,復(fù)制的序列將被修改以符合 arr.length。(數(shù)組長(zhǎng)度不會(huì)改變)
    • start
      開始復(fù)制元素的起始位置虚婿。如果是負(fù)數(shù)旋奢,start 將從末尾開始計(jì)算。
      如果 start 被忽略然痊,copyWithin 將會(huì)從0開始復(fù)制至朗。
    • end
      開始復(fù)制元素的結(jié)束位置。copyWithin 將會(huì)拷貝到該位置剧浸,但不包括 end 這個(gè)位置的元素锹引。如果是負(fù)數(shù), end 將從末尾開始計(jì)算辛蚊。
      如果 end 被忽略粤蝎,copyWithin 方法將會(huì)一直復(fù)制至數(shù)組結(jié)尾(默認(rèn)為 arr.length)。
[1, 2, 3, 4, 5].copyWithin(-2, -3, -1)
// [1, 2, 3, 3, 4]
  1. entries()
    返回一個(gè)新的Array Iterator對(duì)象袋马,該對(duì)象包含數(shù)組中每個(gè)索引的鍵/值對(duì)初澎。
const array1 = ['a', 'b', 'c'];

const iterator1 = array1.entries();

console.log(iterator1.next().value);
// expected output: Array [0, "a"]

console.log(iterator1.next().value);
// expected output: Array [1, "b"]
  1. fill(value[, start[, end]])
    用一個(gè)固定值填充一個(gè)數(shù)組中從起始索引到終止索引內(nèi)的全部元素。不包括終止索引虑凛。
const array1 = [1, 2, 3, 4];
console.log(array1.fill(0, 2, 4));
// expected output: [1, 2, 0, 0]
  1. flat([depth])
    按照一個(gè)可指定的深度遞歸遍歷數(shù)組碑宴,并將所有元素與遍歷到的子數(shù)組中的元素合并為一個(gè)新數(shù)組返回。默認(rèn)結(jié)構(gòu)深度為1桑谍。
    flat() 方法會(huì)移除數(shù)組中的空項(xiàng)延柠。
// 扁平化嵌套數(shù)組
var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]
var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]
  1. includes(valueToFind[, fromIndex])
    用來判斷一個(gè)數(shù)組是否包含一個(gè)指定的值,根據(jù)情況锣披,如果包含則返回 true贞间,否則返回false贿条。(區(qū)分大小寫)
  2. keys()
    返回一個(gè)包含數(shù)組中每個(gè)索引鍵的Array Iterator對(duì)象。
const array1 = ['a', 'b', 'c'];
const iterator = array1.keys();

for (const key of iterator) {
 console.log(key);
}
// expected output: 0
// expected output: 1
// expected output: 2
  1. toLocaleString()
    返回一個(gè)字符串表示數(shù)組中的元素增热。數(shù)組中的元素將使用各自的 toLocaleString 方法轉(zhuǎn)成字符串整以,這些字符串將使用一個(gè)特定語言環(huán)境的字符串(例如一個(gè)逗號(hào) ",")隔開。
  2. toString()
    返回一個(gè)字符串峻仇,表示指定的數(shù)組及其元素公黑。
[1,2,[3,4,5,[6,7]]].toString()
"1,2,3,4,5,6,7"
  1. values()
    返回一個(gè)新的 Array Iterator 對(duì)象,該對(duì)象包含數(shù)組每個(gè)索引的值.
const array1 = ['a', 'b', 'c'];
const iterator = array1.values();

for (const value of iterator) {
  console.log(value);
}

// expected output: "a"
// expected output: "b"
// expected output: "c"
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末摄咆,一起剝皮案震驚了整個(gè)濱河市凡蚜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吭从,老刑警劉巖朝蜘,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異影锈,居然都是意外死亡芹务,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門鸭廷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人熔吗,你說我怎么就攤上這事辆床。” “怎么了桅狠?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵讼载,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我中跌,道長(zhǎng)咨堤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任漩符,我火速辦了婚禮一喘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嗜暴。我一直安慰自己凸克,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布闷沥。 她就那樣靜靜地躺著萎战,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舆逃。 梳的紋絲不亂的頭發(fā)上蚂维,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天戳粒,我揣著相機(jī)與錄音,去河邊找鬼虫啥。 笑死享郊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的孝鹊。 我是一名探鬼主播炊琉,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼又活!你這毒婦竟也來了苔咪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤柳骄,失蹤者是張志新(化名)和其女友劉穎团赏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耐薯,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舔清,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了曲初。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片体谒。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖臼婆,靈堂內(nèi)的尸體忽然破棺而出抒痒,到底是詐尸還是另有隱情,我是刑警寧澤颁褂,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布故响,位于F島的核電站,受9級(jí)特大地震影響颁独,放射性物質(zhì)發(fā)生泄漏彩届。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一誓酒、第九天 我趴在偏房一處隱蔽的房頂上張望樟蠕。 院中可真熱鬧,春花似錦丰捷、人聲如沸坯墨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捣染。三九已至,卻和暖如春停巷,著一層夾襖步出監(jiān)牢的瞬間耍攘,已是汗流浹背榕栏。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蕾各,地道東北人扒磁。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像式曲,于是被迫代替她去往敵國(guó)和親妨托。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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

  • concat 注意吝羞,a數(shù)組并沒有改變兰伤,只是返回了一個(gè)新數(shù)組。 copyWithin 它接受三個(gè)參數(shù)钧排。target ...
    Funwt閱讀 670評(píng)論 0 10
  • ECMAScript3定義的數(shù)組方法 轉(zhuǎn)換:join() 排序: reverse()敦腔、sort() 連接:conc...
    hzrWeber閱讀 384評(píng)論 1 2
  • push() 可以接受一個(gè)或者多個(gè)參數(shù),將參數(shù)追加到數(shù)組的尾部恨溜,返回添加后的數(shù)組的長(zhǎng)度符衔,原數(shù)組會(huì)發(fā)生改變。 pop...
    a91afcace9ee閱讀 266評(píng)論 0 0
  • 1 概述 1.1 前言 JavaScript數(shù)組方法速查手冊(cè)極簡(jiǎn)版中共收了32個(gè)數(shù)組的常用方法和屬性糟袁,并根據(jù)方法的...
    老周學(xué)前端閱讀 226評(píng)論 0 0
  • 推薦指數(shù): 6.0 書籍主旨關(guān)鍵詞:特權(quán)判族、焦點(diǎn)、注意力系吭、語言聯(lián)想五嫂、情景聯(lián)想 觀點(diǎn): 1.統(tǒng)計(jì)學(xué)現(xiàn)在叫數(shù)據(jù)分析,社會(huì)...
    Jenaral閱讀 5,721評(píng)論 0 5