隨筆記錄--JS數(shù)組中常用的方法

數(shù)組中常用的方法

分為四個(gè)維度記憶

  • 方法的作用
  • 方法的參數(shù)
  • 方法的返回值
  • 原有數(shù)組是否改變

push

作用:向數(shù)組”末尾“添加新的內(nèi)容。
參數(shù):追加的內(nèi)容可以是一個(gè)或者是多個(gè)坠七。
返回值:新增數(shù)據(jù)后的長度
原有的數(shù)據(jù)發(fā)生了改變


pop

作用:刪除數(shù)組最后一項(xiàng)
參數(shù):不需要傳遞任何參數(shù)
返回值:返回被刪除那一項(xiàng)的數(shù)值
原有的數(shù)組被改變


shift

作用:刪除數(shù)組中的第一項(xiàng)
參數(shù):不用傳遞任何參數(shù)
返回值:返回被刪除的那一項(xiàng)的值
原有的數(shù)組被改變


基于shift刪除數(shù)組中的第一項(xiàng),刪除后原有數(shù)組后面每一項(xiàng)的索引都要減1(往前移動(dòng)一位)

unshift

作用:向數(shù)組開始位置追加新的內(nèi)容
參數(shù):要新增的內(nèi)容
返回值:新增數(shù)組后的長度
原有的數(shù)組發(fā)生改變


splice

基于splice對(duì)數(shù)組可以進(jìn)行很多操作肠槽,比如:
刪除數(shù)組指定位置的內(nèi)容
向數(shù)組指定位置新增內(nèi)容
還可以修改數(shù)組指定位置的內(nèi)容
刪除:splice(n.m)
從索引n開始,刪除m個(gè)內(nèi)容焕梅,把刪除掉的部分以新的數(shù)組返回迹鹅,原有的數(shù)組被改變。

新增:ary.splice(n,0,x,...)
從索引n開始往前刪除零項(xiàng)(沒刪除)贞言,或者把x的內(nèi)容放入到數(shù)組中索引n位置的前面斜棚。

修改:ary.splice(n,m,x,...)
修改的原理就是把原有的內(nèi)容刪除掉,然后把需要修改的內(nèi)容這部分被刪除信息的位置。返回的是以數(shù)組的形式被修改了的內(nèi)容(也就是被刪掉的內(nèi)容)

案例:

刪除數(shù)組最后一項(xiàng)弟蚀,有幾種方法蚤霞?

除了上面的三種方式之外,還可以用delete刪除數(shù)組中的某一項(xiàng)义钉,但是不建議用delete刪除昧绣,雖然內(nèi)容沒了,但是數(shù)組的長度依然沒有改變捶闸。

向數(shù)組末尾追加新的內(nèi)容夜畴,有幾種方法?

slice

作用:在一個(gè)數(shù)組中删壮,按照條件查找出其中其部分的內(nèi)容贪绘。
參數(shù):兩個(gè)參數(shù)(n/m),從索引n開始醉锅,找到m處,但是不包含m发绢。
返回:以一個(gè)新數(shù)組存儲(chǔ)查找的內(nèi)容
原有數(shù)組不會(huì)變

如果不寫參數(shù)硬耍,可以實(shí)現(xiàn)數(shù)組的克隆,克隆出一個(gè)新的數(shù)組出來边酒,和原來數(shù)組的內(nèi)容一樣经柴,但是不在相同的堆內(nèi)存空間,兩個(gè)數(shù)組是不相等獨(dú)立的墩朦。
slice還支持負(fù)數(shù)索引坯认,負(fù)數(shù)運(yùn)算規(guī)則:數(shù)組總長度+負(fù)數(shù)索引


concat

作用:實(shí)現(xiàn)多個(gè)數(shù)組(或者值)的拼接
參數(shù):數(shù)組或者值
返回:拼接后的新數(shù)組
原有數(shù)組不變

var ary1 = [12,23];
var ary2 = [100,200];
 var ary3 = [2000,3000];
 console.log(ary1.concat(ary2,"xiaoKge",ary2));
// [12, 23, 100, 200, "xiaoKge", 100, 200]

可以基于空數(shù)組作為拼接的開始,在小括號(hào)中排列拼接的順序氓涣,空數(shù)組不會(huì)占據(jù)內(nèi)容的位置牛哺。

[].concat(ary1,'xiaoKge',ary2,ary3);
(7) [12, 23, "xiaoKge", 100, 200, 2000, 3000]

tostring

作用:把數(shù)組轉(zhuǎn)換為字符串
參數(shù):沒有任何參數(shù)
返回值:數(shù)組中的每一項(xiàng)用逗號(hào)分隔的字符串
原有的數(shù)組不變

join

作用:和toString類似,也是吧數(shù)組轉(zhuǎn)換為字符串劳吠,但是我們可以設(shè)置為字符串后每一項(xiàng)之間的鏈接符
參數(shù):指定的鏈接符
返回值:字符串
原有的數(shù)組不變

 var ary1 = [12,23];
 var ary2 = [100,200];
console.log(ary1.join("+"));  //'12+23'

reverse

作用:把數(shù)組倒過來排列
參數(shù):無
返回值:排列后的新數(shù)組
原有的數(shù)組不變

var ary = [12,23,34,45];
console.log(ary.reverse());  //[45, 34, 23, 12]

sort

作用:給數(shù)組排序
參數(shù):無/函數(shù)
返回值:排序后的新數(shù)組
原有的數(shù)組不變

var ary = [2,4,5,3,2,4,5,6,7,8,4,9];
console.log(ary.sort());
//[2, 2, 3, 4, 4, 4, 5, 5, 6, 7, 8, 9]

其中引润,在真實(shí)項(xiàng)目中,基于sort排序痒玩,我們都需要傳遞參數(shù)(函數(shù))

ary.sort(function (a,b){
    return a-b;  //升序

    // return b-a;  //降序
})

ES6中數(shù)組新增的方法

from

作用:from()方法是從一個(gè)類似數(shù)組或可迭代對(duì)象創(chuàng)建一個(gè)新的淳附,淺拷貝的數(shù)組實(shí)例。把類數(shù)組轉(zhuǎn)成數(shù)組
參數(shù)蠢古;

  • arrayLike:想要轉(zhuǎn)換成數(shù)組的偽數(shù)組對(duì)象或可迭代對(duì)象
  • mapFn(可選): 如果指定了該參數(shù)奴曙,新數(shù)組中的每個(gè)元素會(huì)執(zhí)行該回調(diào)函數(shù)。
  • thisArg (可選):執(zhí)行回調(diào)函數(shù) mapFn 時(shí) this 對(duì)象草讶。
    返回值:一個(gè)新的數(shù)組
  <div>
    <ul id="list">
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
    </ul> 
  </div>

  <script>
    let lis = document.querySelectorAll("#list li");
    let arr = Array.from(lis);
    console.log(lis);
    console.log(arr);
  </script>

from()方法的三個(gè)參數(shù)

    // Array.from(類數(shù)組,回調(diào)函數(shù),執(zhí)行回調(diào)函數(shù)的this)
    let data = Array.from(lis,function(item,index) {
      console.log("item: "+ item + "\nindex: " + index + "\nthis: " + this);
      return item;
    },document);
    console.log(data);

isArray

作用:檢測(cè)數(shù)據(jù)是否是一個(gè)數(shù)組
參數(shù):data 要檢測(cè)的數(shù)據(jù)
返回值: true 數(shù)組洽糟,false 非數(shù)組

    let lis = document.querySelectorAll("#list li");
    let arr = [1,2,3,4];
    console.log(Array.isArray(lis));  //false
    console.log(Array.isArray(arr));   //true

Array.of

作用:將參數(shù)轉(zhuǎn)成一個(gè)數(shù)組
參數(shù):elementN 要放入數(shù)組中的數(shù)據(jù)
返回值:新數(shù)組

let res1 = Array.of(2); 
console.log(res1);  // //[ 2 ]

let res2 = Array.of(1,2,3,4);
console.log(res2);  //[ 1, 2, 3, 4 ]

如果原生不支持的話,在其他代碼之前執(zhí)行以下代碼會(huì)創(chuàng)建 Array.of()

if(!Array.of) {
  return function() {
    return Array.prototype.slice.call(arguments);
  }
}

Array.flat

作用: 扁平化多維數(shù)組
參數(shù):指定要提取嵌套數(shù)組的結(jié)構(gòu)深度,默認(rèn)值為 1脊框。
返回值:一個(gè)包含將數(shù)組與子數(shù)組中所有元素的新數(shù)組

let arr = [
  1,2,
  [
    3,
    [4,5]
  ]
]
console.log(arr.flat(1));  //[ 1, 2, 3, [ 4, 5 ] ]
console.log(arr.flat(2)); //[ 1, 2, 3, 4, 5 ]
console.log(arr.flat(Infinity));  //到最后一層: [ 1, 2, 3, 4, 5 ]

Array.flatMap

Array arr.flatMap(function callback(currentValue[, index[, array]]) {
    // 返回新數(shù)組的元素
}[, thisArg])

參數(shù):

  • 回調(diào)函數(shù) (callback)颁督,可以生成一個(gè)新數(shù)組中的元素的函數(shù),可以傳入三個(gè)參數(shù):

    • currentValue 當(dāng)前正在數(shù)組中處理的元素
    • index可選 數(shù)組中正在處理的當(dāng)前元素的索引浇雹。
    • array可選 被調(diào)用的 map 數(shù)組
  • 可選參數(shù):thisArg

    • 執(zhí)行 callback 函數(shù)時(shí) 使用的this 值

返回值:一個(gè)包含將數(shù)組與子數(shù)組中所有元素的新數(shù)組

let arr = [
  [1,2],
  [3,4],
  [6,8]
];
let arr2 = arr.flatMap(item => {
  item = item.filter(item => item >= 2);
  return item;
});
console.log(arr2);  //[ 2, 3, 4, 6, 8 ]

Array.fill

Array arr.fill(value[, start[, end]]);
用一個(gè)固定值填充一個(gè)數(shù)組中從起始索引到終止索引內(nèi)的全部元素沉御。不包括終止索引

參數(shù):
用來填充數(shù)組元素的值。
可選參數(shù):

  • start 起始索引昭灵,默認(rèn)值為0吠裆。
  • end 終止索引,默認(rèn)值為 arr.length
let arr = ["a","b","c","d","e"];
arr.fill("f",1,3);
console.log(arr); //[ 'a', 'f', 'f', 'd', 'e' ]

arr.includes

Boolean arr.includes(valueToFind[, fromIndex])
作用:判斷數(shù)組中是否包含一個(gè)指定的值
參數(shù):

  • valueToFind 需要查找的值
  • 可選參數(shù):從 fromIndex 處開始向后查找

返回值: true 代表數(shù)組中包含 valueToFind烂完, false 代表數(shù)組中不包含 fromIndex

let arr = ["a","b","c","d"];
console.log(arr.includes('a'));  //true
console.log(arr.includes("a",-3));  //false
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末试疙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子抠蚣,更是在濱河造成了極大的恐慌祝旷,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘶窄,死亡現(xiàn)場(chǎng)離奇詭異怀跛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)柄冲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門吻谋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人现横,你說我怎么就攤上這事漓拾。” “怎么了戒祠?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵骇两,是天一觀的道長。 經(jīng)常有香客問我姜盈,道長脯颜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任贩据,我火速辦了婚禮栋操,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘饱亮。我一直安慰自己矾芙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布近上。 她就那樣靜靜地躺著剔宪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上葱绒,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天感帅,我揣著相機(jī)與錄音,去河邊找鬼地淀。 笑死失球,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的帮毁。 我是一名探鬼主播实苞,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼烈疚!你這毒婦竟也來了黔牵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤爷肝,失蹤者是張志新(化名)和其女友劉穎猾浦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灯抛,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡金赦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了牧愁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片素邪。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡外莲,死狀恐怖猪半,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情偷线,我是刑警寧澤磨确,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站声邦,受9級(jí)特大地震影響乏奥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜亥曹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一邓了、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧媳瞪,春花似錦骗炉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春乍丈,著一層夾襖步出監(jiān)牢的瞬間剂碴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工轻专, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留忆矛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓铭若,卻偏偏與公主長得像洪碳,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叼屠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354