JavaScript 數(shù)組挖掘

splice與slice實(shí)現(xiàn)數(shù)組的增刪改查

let arr = [1, 2, 3, 4];
console.log(arr.slice(1, 3)); //從第一個(gè)開(kāi)始截到3 得到的就是一個(gè)2 和 3 不會(huì)改變?cè)瓟?shù)組
console.log(arr.slice(0, 3)); //從0開(kāi)始截到3 得到的就是一個(gè)1 和 2 和 3 不會(huì)改變?cè)瓟?shù)組
console.log(arr.slice());  //如果不穿參數(shù) 得到的是整個(gè)數(shù)組
console.log(arr);
let arr = [1, 2, 3, 4];
// console.log(arr.splice(1, 2)); //從數(shù)組下標(biāo)1開(kāi)始 截取1后面2個(gè) 返回截取的數(shù)組[2, 3] 會(huì)改變?cè)瓟?shù)組
// console.log(arr); //[1, 4]
let hd = arr.splice(1, 2, '123'); //從數(shù)組下標(biāo)1開(kāi)始  截取1后面的2個(gè) 再?gòu)?后面增加一個(gè)123 會(huì)改變?cè)瓟?shù)組
// console.log(arr); //[1, '123', 4]

數(shù)據(jù)出棧與入棧及填充操作

let arr = [1, 2, 3];
// let hd = arr.pop(); //刪除最后一個(gè) 返回刪除的數(shù)字 改變?cè)瓟?shù)組
// let hd = arr.unshift(0); // 往數(shù)組前面增加一個(gè) 返回增加的數(shù)組 改變?cè)瓟?shù)組
// let hd = arr.shift(); //刪除數(shù)組中第一個(gè) 返回 刪除的值 改變?cè)瓟?shù)組
let hd = arr.push(0); //往數(shù)組后面增加一個(gè) 返回增加的數(shù)組 改變?cè)瓟?shù)組

解構(gòu)賦值 可以理解為把結(jié)構(gòu)里面的值批量賦值給變量

    //數(shù)組解構(gòu)賦值
    let arr = ['孫悟空', '豬八戒'];
    let [swk, zbj] = arr;
    console.log(swk); //孫悟空
    console.log(zbj); //豬八戒
    //對(duì)象解構(gòu)賦值
    let obj = {name: '孫悟空', age: '1000'};
    let {name, age} = obj;
    console.log(name); //孫悟空
    console.log(age); //1000
let [, arr] = ['name1', 'name2']
console.log(arr); //name2
let [arr, ...arrAll] = ['name1', 'name2', 'name3', 'name4']
console.log(arr); //name1
console.log(arrAll); //['name2', 'name3', 'name4'

展開(kāi)運(yùn)算符 展開(kāi)放在變量位置 是把內(nèi)容全部吸過(guò)來(lái) 放在值的位置 就表示 全部展開(kāi)

  //一般拼接數(shù)組方法
    let arr = [1, 2, 3];
    let hd = [4, 5, 6];
    for (let item of hd) {
        arr.push(item);
    }
    console.log(arr); //[1, 2, 3, 4, 5, 6]
//展開(kāi)符拼接數(shù)組
 let arr = [1, 2, 3];
 let hd = [4, 5, 6];
 arr = [...arr, ...hd];
 console.log(arr); //[1, 2, 3, 4, 5, 6]
   //函數(shù)展開(kāi)語(yǔ)法 當(dāng)函數(shù)參數(shù)不確定時(shí)候 可以用展開(kāi)語(yǔ)法接受參數(shù)
    function show(...args) {
        console.log(args); //[1, 2, 3, 4] 返回的是一個(gè)數(shù)組
    }
    console.log(show(1, 2, 3, 4));

數(shù)組的拆分與合并

    let arr = '孫悟空, 豬八戒';
    let hd = arr.split(','); //以逗號(hào)形式拆分 字符串 并返回一個(gè)數(shù)組;
    console.log(hd); // ["孫悟空", " 豬八戒"]
    console.log(hd.join(',')) //孫悟空, 豬八戒 (以逗號(hào)的形式 合并 返回字符串)

查找元素的基本操作

es5 之前查找元素 indexOf() 從左側(cè)查找數(shù)組 返回查找數(shù)組的索引值甩十,如果數(shù)組中不包含查找的數(shù)字 返回-1

 let arr = [1, 2 , 3 , 2];
 console.log(arr.indexOf(2)) // 1(返回arr數(shù)組中2的位置)
 console.log(arr.indexOf(-2)) // -1 (數(shù)組中沒(méi)有-2這個(gè)值)
 console.log(arr.indexOf(2, 2)) // 3 (參數(shù)1:查找2   參數(shù)2:從數(shù)組第二個(gè)開(kāi)始查找)

lastIndexOf()從右側(cè)查找數(shù)組 返回查找數(shù)組的索引值菌湃,如果數(shù)組中不包含查找的數(shù)字 返回-1

 let arr = [1, 2 , 4, 5, 3 , 2];
 console.log(arr.lastIndexOf(2)) // 返回3 (因?yàn)閺挠覀?cè)開(kāi)始查找蜻展,輸入從右邊 要查找的 位置)
 console.log(arr.lastIndexOf(2, 3)) // 1 (參數(shù)1:查找2 參數(shù)2:從數(shù)組最后一個(gè)數(shù)三位開(kāi)始查找 2)

一般開(kāi)發(fā)中要找數(shù)組中是否包含某個(gè)數(shù)

  let arr = [1, 2 , 3];
  if(arr.indexOf(2) !== -1){
    console.log('找到了');
  }

新版的es6中 有一個(gè)includes() 接受一個(gè)參數(shù)查找數(shù)組中是否有要查找的值 返回的是一個(gè)布爾值

 let arr = [1, 2 , 3];
 console.log(arr.includes(2)) //true
 console.log(arr.includes(5)) //false
 if(arr.includes(2)){
   console.log('找到了');
 }

高效的find與findIndex新增方法

   // find 最主要的查找用法 查找引用類型 (引用類型比較 比較的是內(nèi)存地址 )
   let lessons = [{name: 'js'}, {name: 'php'}, {name: 'css'}];
   let status = lessons.find(item => item.name == 'php'); //就進(jìn)查找 數(shù)組中是否有值 有的話 返回當(dāng)前值,沒(méi)有就返回undefined
   let status1 = lessons.find(item => item.name == 'java'); //undefined
   let index = lessons.findIndex(item => item.name == 'php'); //就進(jìn)查找 數(shù)組中是否有值 有的話 返回索引值暖途,沒(méi)有就返回undefined
   console.log(status); //{name: "php"}
   console.log(status1); // undefined
   console.log(index); // 1

//自定義find寫(xiě)法

    function find (array, callback) {
        for (let item of array){
            if (callback(item)) return item;
        }
        return undefined;
    }

    let arr = [1, 2, 3, 4];
    console.log(find(arr, function (item) {
        return item === 3
    }));

sort排序

    //sort排序
    let arr = [10, 8, 6, 5, 2, 1];
    arr = arr.sort(function (a, b) {
        // -1 從小到大 1 正數(shù)從大到小
        // 10 - 8 =
        return a - b;
    });
    arr = arr.sort((a,b) => a - b);
    console.log(arr);
//冒泡排序
// 1懈凹、比較相鄰的兩個(gè)元素,如果前一個(gè)比后一個(gè)大,則交換位置侧但。
// 2矢空、比較完第一輪的時(shí)候,最后一個(gè)元素是最大的元素俊犯。
// 3妇多、這時(shí)候最后一個(gè)元素是最大的,所以最后一個(gè)元素就不需要參與比較大小燕侠。
function sort(array) {
    for (let n in array) {
        for (let m in array){
            let tep = [];
            if (array[n] > array[m]){
                tep = array[n];
                array[n] = array[m]
                array[m] = tep;
            }
        }
    }
    return array;
}

console.log(sort([1, 9, 8]));

數(shù)組循環(huán)操作

//循環(huán)操作中引用類型使用技巧
    let arr = [{n: 1}, {n: 2}];
    let arr1 = [1, 2, 3];
    //for of 只能改變引用類型
    for (let value of arr) {
        value.n ++;
    }
    for (let value1 of arr1) {
        value1 ++; // 不會(huì)改變值類型的數(shù)組
    }
    console.log(arr); // [{n: 2}, {n: 3}]
  console.log(arr1); // [1, 2, 3]

forEach

   let arr = [
        {name : 'JavaScript'},
        {name : 'PHP'},
        {name : 'Python'}
    ]
    arr.forEach((item, index, array) => {
        //item 第一個(gè)參數(shù)是遍歷的數(shù)組內(nèi)容者祖,
        // index 第二個(gè)參數(shù)是對(duì)應(yīng)的數(shù)組索引,
        // array 第三個(gè)參數(shù)是數(shù)組本身
        console.log(item, index, array);
    })

every (返回一個(gè)布爾值)

const user = [
        {name: '李四', js: 89},
        {name: '張三', js: 99},
        {name: '馬六', js: 55},
    ];
    /**
     * (every() 方法用于檢測(cè)數(shù)組所有元素是否都符合指定條件绢彤。一項(xiàng)不符合 就返回false七问,全部符合就返回true)
     * item 是每一項(xiàng)的 數(shù)組
     * index 數(shù)組索引值
     * arr 原數(shù)組
     * **/
    const res = user.every((item, index, arr) => {
        return item.js >= 60; //false
    });

    if (res) {
        console.log('成績(jī)不合格')
    } else {
        console.log('成績(jī)?nèi)亢细?)
    }

some (返回一個(gè)布爾值)

    //some 當(dāng)一個(gè)為真 就返回真
    const user = [
        {name: '李四', js: 89},
        {name: '張三', js: 99},
        {name: '馬六', js: 55},
    ];
    let res = user.some(item => {
        return item.js > 60;
    });
    console.log(res); //true

filter (可以篩選出想要的值,返回一個(gè)數(shù)組)

    let lessons = [{name: 'js'}, {name: 'php'}, {name: 'css'}];
    //求出數(shù)組中包含的css項(xiàng)
    let res = lessons.filter(item => {
        return item.name === 'css'
    });
    console.log(res);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茫舶,一起剝皮案震驚了整個(gè)濱河市械巡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌饶氏,老刑警劉巖讥耗,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異疹启,居然都是意外死亡古程,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)喊崖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)挣磨,“玉大人,你說(shuō)我怎么就攤上這事荤懂∽氯梗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵节仿,是天一觀的道長(zhǎng)晤锥。 經(jīng)常有香客問(wèn)我,道長(zhǎng)廊宪,這世上最難降的妖魔是什么查近? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮挤忙,結(jié)果婚禮上霜威,老公的妹妹穿的比我還像新娘。我一直安慰自己册烈,他們只是感情好戈泼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布婿禽。 她就那樣靜靜地躺著,像睡著了一般大猛。 火紅的嫁衣襯著肌膚如雪扭倾。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天挽绩,我揣著相機(jī)與錄音膛壹,去河邊找鬼。 笑死唉堪,一個(gè)胖子當(dāng)著我的面吹牛模聋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播唠亚,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼链方,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了灶搜?” 一聲冷哼從身側(cè)響起祟蚀,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎割卖,沒(méi)想到半個(gè)月后前酿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鹏溯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年薪者,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剿涮。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖攻人,靈堂內(nèi)的尸體忽然破棺而出取试,到底是詐尸還是另有隱情,我是刑警寧澤怀吻,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布瞬浓,位于F島的核電站,受9級(jí)特大地震影響蓬坡,放射性物質(zhì)發(fā)生泄漏猿棉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一屑咳、第九天 我趴在偏房一處隱蔽的房頂上張望萨赁。 院中可真熱鬧,春花似錦兆龙、人聲如沸杖爽。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)慰安。三九已至腋寨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間化焕,已是汗流浹背萄窜。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撒桨,地道東北人查刻。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像元莫,于是被迫代替她去往敵國(guó)和親赖阻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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

  • 說(shuō)點(diǎn)啥 數(shù)組是程序員的法寶之一踱蠢,善用數(shù)組方法可以使數(shù)據(jù)處理變的簡(jiǎn)單(優(yōu)雅)火欧。每次重新看數(shù)組的知識(shí)都有新收獲。 什么...
    石菖蒲_xl閱讀 919評(píng)論 0 11
  • JavaScript數(shù)組0709 1.創(chuàng)建方式 通過(guò)構(gòu)造函數(shù)創(chuàng)建數(shù)組let 變量名稱 = new Array(si...
    煤球快到碗里來(lái)閱讀 178評(píng)論 0 1
  • JavaScript數(shù)組 專門(mén)用于存儲(chǔ)一組數(shù)據(jù)的,不是基本數(shù)據(jù)類型,是引用數(shù)據(jù)類型(對(duì)象類型) 創(chuàng)建數(shù)組let 變...
    七分之二十四閱讀 246評(píng)論 0 0
  • js數(shù)組的使用茎截,一般都離不開(kāi)循環(huán)苇侵;那我們首先先來(lái)梳理一下數(shù)組中常用的10種循環(huán),再來(lái)講ES6數(shù)組中新增的一些東西 ...
    深度剖析JavaScript閱讀 1,355評(píng)論 0 11
  • 久違的晴天企锌,家長(zhǎng)會(huì)榆浓。 家長(zhǎng)大會(huì)開(kāi)好到教室時(shí),離放學(xué)已經(jīng)沒(méi)多少時(shí)間了撕攒。班主任說(shuō)已經(jīng)安排了三個(gè)家長(zhǎng)分享經(jīng)驗(yàn)陡鹃。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,515評(píng)論 16 22