日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

JavaScript 終于原生支持?jǐn)?shù)組分組了!

來(lái)源: 責(zé)編: 時(shí)間:2023-09-21 20:48:14 315觀看
導(dǎo)讀以前的數(shù)組分組假設(shè)有一個(gè)由表示人員的對(duì)象組成的數(shù)組,需要按照年齡進(jìn)行分組??梢允褂胒orEach循環(huán)來(lái)實(shí)現(xiàn),代碼如下:const people = [ { name: "Alice", age: 28 }, { name: "Bob", age: 30 }, { name: "Eve", age: 2

yo828資訊網(wǎng)——每日最新資訊28at.com

以前的數(shù)組分組

假設(shè)有一個(gè)由表示人員的對(duì)象組成的數(shù)組,需要按照年齡進(jìn)行分組??梢允褂胒orEach循環(huán)來(lái)實(shí)現(xiàn),代碼如下:yo828資訊網(wǎng)——每日最新資訊28at.com

const people = [  { name: "Alice", age: 28 },  { name: "Bob", age: 30 },  { name: "Eve", age: 28 },];const peopleByAge = {};people.forEach((person) => {  const age = person.age;  if (!peopleByAge[age]) {    peopleByAge[age] = [];  }  peopleByAge[age].push(person);});console.log(peopleByAge);

輸出結(jié)果如下:yo828資訊網(wǎng)——每日最新資訊28at.com

{  "28": [{"name":"Alice","age":28}, {"name":"Eve","age":28}],  "30": [{"name":"Bob","age":30}]}

也可以使用reduce方法:yo828資訊網(wǎng)——每日最新資訊28at.com

const peopleByAge = people.reduce((acc, person) => {  const age = person.age;  if (!acc[age]) {    acc[age] = [];  }  acc[age].push(person);  return acc;}, {});

無(wú)論哪種方式,代碼都略顯繁瑣。每次都要檢查對(duì)象,看分組鍵是否存在,如果不存在,則創(chuàng)建一個(gè)空數(shù)組,并將項(xiàng)目添加到該數(shù)組中。yo828資訊網(wǎng)——每日最新資訊28at.com

使用 Object.groupBy 分組

可以通過(guò)以下方式來(lái)使用新的Object.groupBy方法:yo828資訊網(wǎng)——每日最新資訊28at.com

const peopleByAge = Object.groupBy(people, (person) => person.age);

可以看到,代碼非常簡(jiǎn)潔!yo828資訊網(wǎng)——每日最新資訊28at.com

不過(guò)需要注意,使用Object.groupBy方法返回一個(gè)沒(méi)有原型(即沒(méi)有繼承任何屬性和方法)的對(duì)象。這意味著該對(duì)象不會(huì)繼承Object.prototype上的任何屬性或方法,例如hasOwnProperty或toString等。雖然這樣做可以避免意外覆蓋Object.prototype上的屬性,但也意味著不能使用一些與對(duì)象相關(guān)的方法。yo828資訊網(wǎng)——每日最新資訊28at.com

const peopleByAge = Object.groupBy(people, (person) => person.age);console.log(peopleByAge.hasOwnProperty("28"));// TypeError: peopleByAge.hasOwnProperty is not a function

在調(diào)用Object.groupBy時(shí),傳遞給它的回調(diào)函數(shù)應(yīng)該返回一個(gè)字符串或 Symbol 類(lèi)型的值。如果回調(diào)函數(shù)返回其他類(lèi)型的值,它將被強(qiáng)制轉(zhuǎn)換為字符串。yo828資訊網(wǎng)——每日最新資訊28at.com

在這個(gè)例子中,回調(diào)函數(shù)返回的是一個(gè)數(shù)字類(lèi)型的age屬性值,但由于Object.groupBy方法要求鍵必須是字符串或 Symbol 類(lèi)型,所以該數(shù)字會(huì)被強(qiáng)制轉(zhuǎn)換為字符串類(lèi)型。yo828資訊網(wǎng)——每日最新資訊28at.com

console.log(peopleByAge[28]);// => [{"name":"Alice","age":28}, {"name":"Eve","age":28}]console.log(peopleByAge["28"]);// => [{"name":"Alice","age":28}, {"name":"Eve","age":28}]

使用 Map.groupBy 分組

Map.groupBy和Object.groupBy幾乎做的是相同的事情,只是返回的結(jié)果類(lèi)型不同。Map.groupBy返回一個(gè)Map對(duì)象,而不是像Object.groupBy返回一個(gè)普通的對(duì)象。yo828資訊網(wǎng)——每日最新資訊28at.com

const ceo = { name: "Jamie", age: 40, reportsTo: null };const manager = { name: "Alice", age: 28, reportsTo: ceo };const people = [  ceo  manager,  { name: "Bob", age: 30, reportsTo: manager },  { name: "Eve", age: 28, reportsTo: ceo },];const peopleByManager = Map.groupBy(people, (person) => person.reportsTo);

這里根據(jù)人的匯報(bào)上級(jí)將他們進(jìn)行了分組。如果想通過(guò)對(duì)象來(lái)從這個(gè)Map中獲取數(shù)據(jù),那么要求這些對(duì)象具有相同的身份或引用。這是因?yàn)镸ap在比較鍵時(shí)使用的是嚴(yán)格相等(===),只有兩個(gè)對(duì)象具有相同的引用,才能被認(rèn)為是相同的鍵。yo828資訊網(wǎng)——每日最新資訊28at.com

peopleByManager.get(ceo);// => [{ name: "Alice", age: 28, reportsTo: ceo }, { name: "Eve", age: 28, reportsTo: ceo }]peopleByManager.get({ name: "Jamie", age: 40, reportsTo: null });// => undefined

在上面的例子中,如果嘗試使用與ceo對(duì)象類(lèi)似的對(duì)象作為鍵去訪(fǎng)問(wèn)Map中的項(xiàng),由于這個(gè)對(duì)象與之前存儲(chǔ)在Map中的ceo對(duì)象不是同一個(gè)對(duì)象,所以無(wú)法檢索到對(duì)應(yīng)的值。yo828資訊網(wǎng)——每日最新資訊28at.com

瀏覽器支持

這兩個(gè)groupBy方法是 proposal-array-grouping 提案提出的,該提案目前處于第3階段,預(yù)計(jì)會(huì)在 2024 年成為正式標(biāo)準(zhǔn)。yo828資訊網(wǎng)——每日最新資訊28at.com

9 月 12 日,Chrome 117發(fā)布,該版本支持了這兩個(gè)方法。Firefox Nightly 在一個(gè)標(biāo)志后已經(jīng)實(shí)現(xiàn)了這兩個(gè)方法。Safari已經(jīng)以不同的名稱(chēng)實(shí)現(xiàn)了這些方法。由于這些方法在 Chrome 中可用,這意味著它們已經(jīng)在V8中被實(shí)現(xiàn),所以下一次V8更新時(shí)它們將在Node中可用。yo828資訊網(wǎng)——每日最新資訊28at.com

yo828資訊網(wǎng)——每日最新資訊28at.com

yo828資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-10900-0.htmlJavaScript 終于原生支持?jǐn)?shù)組分組了!

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 前后端分離項(xiàng)目必備——自動(dòng)生成API文檔神器Swagger

下一篇: OpenAI一夜顛覆AI繪畫(huà)!DALL·E 3+ChatGPT強(qiáng)強(qiáng)聯(lián)合,畫(huà)面直接細(xì)節(jié)爆炸

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
  • 6月iOS設(shè)備好評(píng)榜:第一蟬聯(lián)榜首近一年

    作為安兔兔各種榜單里變化最小的那個(gè),2023年6月的iOS好評(píng)榜和上個(gè)月相比沒(méi)有任何排名上的變化,僅僅是部分設(shè)備好評(píng)率的下降,長(zhǎng)年累月的用戶(hù)評(píng)價(jià)和逐漸退出市場(chǎng)的老款機(jī)器讓這
  • JavaScript 混淆及反混淆代碼工具

    介紹在我們開(kāi)始學(xué)習(xí)反混淆之前,我們首先要了解一下代碼混淆。如果不了解代碼是如何混淆的,我們可能無(wú)法成功對(duì)代碼進(jìn)行反混淆,尤其是使用自定義混淆器對(duì)其進(jìn)行混淆時(shí)。什么是混
  • 掘力計(jì)劃第 20 期:Flutter 混合開(kāi)發(fā)的混亂之治

    在掘力計(jì)劃系列活動(dòng)第20場(chǎng),《Flutter 開(kāi)發(fā)實(shí)戰(zhàn)詳解》作者,掘金優(yōu)秀作者,Github GSY 系列目負(fù)責(zé)人戀貓的小郭分享了Flutter 混合開(kāi)發(fā)的混亂之治。Flutter 基于自研的 Skia 引擎
  • 一文看懂為蘋(píng)果Vision Pro開(kāi)發(fā)應(yīng)用程序

    譯者 | 布加迪審校 | 重樓蘋(píng)果的Vision Pro是一款混合現(xiàn)實(shí)(MR)頭戴設(shè)備。Vision Pro結(jié)合了虛擬現(xiàn)實(shí)(VR)和增強(qiáng)現(xiàn)實(shí)(AR)的沉浸感。其高分辨率顯示屏、先進(jìn)的傳感器和強(qiáng)大的處理能力
  • 為什么你不應(yīng)該使用Div作為可點(diǎn)擊元素

    按鈕是為任何網(wǎng)絡(luò)應(yīng)用程序提供交互性的最常見(jiàn)方式。但我們經(jīng)常傾向于使用其他HTML元素,如 div span 等作為 clickable 元素。但通過(guò)這樣做,我們錯(cuò)過(guò)了許多內(nèi)置瀏覽器的功能。
  • 疑似小米14外觀設(shè)計(jì)圖曝光:后置相機(jī)模組變化不大

    下半年的大幕已經(jīng)開(kāi)啟,而誰(shuí)將成為下半年手機(jī)圈的主角就成為了大家關(guān)注的焦點(diǎn),其中被傳有望拿下新一代驍龍8 Gen3旗艦芯片的小米14系列更是備受大家矚
  • iQOO 11S評(píng)測(cè):行業(yè)唯一的200W標(biāo)準(zhǔn)版旗艦

    【Techweb評(píng)測(cè)】去年底,iQOO推出了“電競(jìng)旗艦”iQOO 11系列,作為一款性能強(qiáng)機(jī),該機(jī)不僅全球首發(fā)2K 144Hz E6全感屏,搭載了第二代驍龍8平臺(tái)及144Hz電競(jìng)
  • iQOO Neo8 Pro真機(jī)諜照曝光:天璣9200+和V1+旗艦雙芯加持

    去年10月,iQOO推出了iQOO Neo7系列機(jī)型,不僅搭載了天璣9000+,而且是同價(jià)位唯一一款天璣9000+直屏旗艦,一經(jīng)上市便受到了用戶(hù)的廣泛關(guān)注。在時(shí)隔半年后,
  • 北京:科技教育體驗(yàn)基地開(kāi)始登記

      北京“科技館之城”科技教育體驗(yàn)基地登記和認(rèn)證工作日前啟動(dòng)。首批北京科技教育體驗(yàn)基地?cái)M于2023年全國(guó)科普日期間掛牌,后續(xù)還將開(kāi)展常態(tài)化登記?! ”本┛萍冀逃w驗(yàn)基
Top 主站蜘蛛池模板: 晋城| 沽源县| 汕头市| 长兴县| 济阳县| 仙游县| 桦南县| 锦州市| 陆丰市| 龙江县| 四川省| 金秀| 江陵县| 普洱| 苏州市| 仪征市| 岳阳县| 宾川县| 时尚| 汽车| 周口市| 沂南县| 雷波县| 云浮市| 广汉市| 乳山市| 绥化市| 巴里| 扎鲁特旗| 吉林市| 墨江| 仪陇县| 长汀县| 通州区| 澄迈县| 尼玛县| 海城市| 巴南区| 邢台县| 桐柏县| 昌吉市|