07 數(shù)組基本操作指南二

作者:?緝熙Soyaine
簡(jiǎn)介:JavaScript30Wes Bos 推出的一個(gè) 30 天挑戰(zhàn)。項(xiàng)目免費(fèi)提供了 30 個(gè)視頻教程、30 個(gè)挑戰(zhàn)的起始文檔和 30 個(gè)挑戰(zhàn)解決方案源代碼。目的是幫助人們用純 JavaScript 來寫東西,不借助框架和庫(kù),也不使用編譯器和引用?,F(xiàn)在你看到的是這系列指南的第 7 篇。完整指南在 GitHub,喜歡請(qǐng) Star 哦?(?*)

實(shí)現(xiàn)效果

這一部分是挑戰(zhàn) 04 的后續(xù),繼續(xù)熟悉 Array 的一些基本方法,包括 some()、every()find()、splice()、slice()。這篇比較簡(jiǎn)單,但如果沒有看過上一篇文章,建議回去溫習(xí)一下。(畢竟上一篇更酷 :)

文檔提供了用于操作的 people 和 comments 數(shù)組,模擬的是人員信息及評(píng)論數(shù)據(jù),基于這兩個(gè)數(shù)組可以練習(xí)一下上面提及的各個(gè)方法,請(qǐng)打開 HTML 后在 Console 面板中查看輸出結(jié)果。

過程指南

針對(duì) people 數(shù)組:

  1. 是否有人超過 19 歲?
  2. 是否所有人都是成年人?

針對(duì) comments 數(shù)組:

  1. 找到 ID 號(hào)為 823423 的評(píng)論
  2. 刪除 ID 號(hào)為 823423 的評(píng)論
    1. 獲取此 ID 對(duì)應(yīng)元素在數(shù)組中所處的位置
    2. 利用位置,刪除該子元素
    3. 或者拼接新的數(shù)組

相關(guān)知識(shí)

someevery

兩者的相同之處是,都接受一個(gè)函數(shù)作為參數(shù),對(duì)數(shù)組元素都執(zhí)行一次此函數(shù),都不會(huì)改變?cè)瓟?shù)組的值。不同之處在于返回條件不同:

some() 中直到某個(gè)數(shù)組元素使此函數(shù)為 true,就立即返回 true。所以可以用來判斷一個(gè)數(shù)組中,是否存在某個(gè)符合條件的值。

    const isAdult = people.some( person => {
        const currentYear = (new Date()).getFullYear();
        return currentYear - person.year >= 19;
    });
    console.log({isAdult});

every() 中除非所有值都使此函數(shù)為 true,才會(huì)返回 true 值,否則為 false。主要用處,即判斷是否所有元素都符合條件。

    const allAdult = people.every( person => new Date().getFullYear() - person.year >= 19);
    console.log({allAdult});

some() 相對(duì)應(yīng)的話,some() 像是或運(yùn)算,而 every() 則是與運(yùn)算了。

findfineIndex

這兩個(gè) ES6 的新特性類似于 some() ,但對(duì)于符合條件的元素,返回值不是布爾類型。不一樣的地方在于,find() 返回的是這個(gè)元素的值(或 undefined),而 findIndex() 返回的是這個(gè)元素的索引(或 -1)。

    const comment = comments.find(comment => comment.id == 823423);
    const index = comments.findIndex(comment => comment.id == 823423);

slicesplice

這兩者比較相似的地方,大概只有:參數(shù)的第一個(gè)都是指的起始位置,且都接受負(fù)數(shù),若是負(fù)數(shù),代表倒數(shù)第幾位。

而其他地方是需要區(qū)分清楚的:

  • slice():不修改原數(shù)組,按照參數(shù)復(fù)制一個(gè)新數(shù)組,參數(shù)表述復(fù)制的起點(diǎn)和終點(diǎn)索引(省略則代表到末尾),但終點(diǎn)索引位置的元素不包含在內(nèi)。
  • splice():原數(shù)組會(huì)被修改。第二個(gè)參數(shù)代表要?jiǎng)h掉的元素個(gè)數(shù),之后可選的參數(shù),表示要替補(bǔ)被刪除位置的元素。

讓我們來聯(lián)想一下,看到一塊紋著漂亮花紋的布料,slice 拿出相機(jī)拍了一張照,而 splice 拿出剪刀把這個(gè)花紋剪下來帶走了,再用其他布料給縫回去。

所以想要?jiǎng)h除一個(gè)元素,有兩種實(shí)現(xiàn)思路,一是把出它之外的元素給復(fù)制下來再合在一起,二是直接把它刪除。

    // 刪除方法一,splice()
    // comments.splice(index, 1);
    
    // 刪除方法二,slice 拼接
    const newComments = [
        ...comments.slice(0, index),
        ...comments.slice(index + 1)
    ];

上面的三個(gè)點(diǎn)(...)是 ES6 中的擴(kuò)展語法,可以展開這個(gè)數(shù)組并方便的拼接。

至此,數(shù)組基本操作二就結(jié)束啦~(≧▽≦)/

創(chuàng)建日期:2017-01-03
最后更新:2017-01-03

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容