AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

前端面試:你以為這只是一個簡單的數組去重嗎?

來源: 責編: 時間:2024-04-10 08:36:31 206觀看
導讀前言之前面試過程被問到數組去重有哪些方式?心想這個問題我會,隨便也能說出好幾種,也不帶多思考的。巴拉巴拉巴拉巴拉。說完,面試官好像不太滿意的樣子,還問了句,沒了嗎。我想,咋滴,就這些還不不夠用嗎。然后就下一題了。后來

前言

之前面試過程被問到數組去重有哪些方式?心想這個問題我會,隨便也能說出好幾種,也不帶多思考的。巴拉巴拉巴拉巴拉。說完,面試官好像不太滿意的樣子,還問了句,沒了嗎。我想,咋滴,就這些還不不夠用嗎。然后就下一題了。k3L28資訊網——每日最新資訊28at.com

后來我看到這樣的數據,忽然意識到,之前的面試怕不是草率了,完全沒考慮復雜數據結構,難怪他聽完不太滿意的樣子。k3L28資訊網——每日最新資訊28at.com

let arr = [1, 1, '2', 3, 1, 2,    { name: '張三', id: { n: 1 }},    { name: '張三', id: { n: 1 }},    { name: '張三', id: { n: 2 }}]

在平時的開發過程中這樣的數據應該少見,絕大部分的數組中數據格式應該保持一致,特殊情況就不管他了。k3L28資訊網——每日最新資訊28at.com

今天再來出一期數組去重的方式。k3L28資訊網——每日最新資訊28at.com

基本數據類型去重

確實有多種方式,比如set結構轉一下,lodash提供的uniq方法,或者自己利用其他方式實現也是很多的。今天就介紹幾個k3L28資訊網——每日最新資訊28at.com

當面試官詢問數組去重時,可以考慮到數組可能包含基本數據類型、引用數據類型,或者混合了兩種類型的情況。以下是針對不同情況的多種思路和實現方法:k3L28資訊網——每日最新資訊28at.com

使用 Set 數據結構(ES6)k3L28資訊網——每日最新資訊28at.com

const array = [1, 2, 3, 3, 4, 5, 5];const uniqueArray = [...new Set(array)];console.log(uniqueArray); // [1, 2, 3, 4, 5]

使用 Array.prototype.filter()k3L28資訊網——每日最新資訊28at.com

const array = [1, 2, 3, 3, 4, 5, 5];const uniqueArray = array.filter((item, index) => array.indexOf(item) === index);console.log(uniqueArray); // [1, 2, 3, 4, 5]

使用 Array.prototype.reduce()k3L28資訊網——每日最新資訊28at.com

const array = [1, 2, 3, 3, 4, 5, 5];const uniqueArray = array.reduce((acc, curr) => {    if (!acc.includes(curr)) {        acc.push(curr);    }    return acc;}, []);console.log(uniqueArray); // [1, 2, 3, 4, 5]

使用 for 循環和 Array.prototype.indexOf()k3L28資訊網——每日最新資訊28at.com

const array = [1, 2, 3, 3, 4, 5, 5];const uniqueArray = [];for (let i = 0; i < array.length; i++) {    if (uniqueArray.indexOf(array[i]) === -1) {        uniqueArray.push(array[i]);    }}console.log(uniqueArray); // [1, 2, 3, 4, 5]

Lodash 是一個非常流行的 JavaScript 工具庫,提供了許多實用的函數來簡化開發過程。它也包含了一些用于數組去重的方法。以下是幾種利用 Lodash 實現數組去重的方法:k3L28資訊網——每日最新資訊28at.com

使用 _.uniq() 方法k3L28資訊網——每日最新資訊28at.com

const _ = require('lodash');const array = [1, 2, 3, 3, 4, 5, 5];const uniqueArray = _.uniq(array);console.log(uniqueArray); // [1, 2, 3, 4, 5]

使用 _.uniqWith() 方法(使用自定義比較函數)k3L28資訊網——每日最新資訊28at.com

const _ = require('lodash');const array = [{id: 1}, {id: 2}, {id: 1}];const uniqueArray = _.uniqWith(array, (a, b) => _.isEqual(a, b));console.log(uniqueArray); // [{id: 1}, {id: 2}]

2. 數組包含引用數據類型:

使用 Set 數據結構,利用自定義比較函數(如果需要去重對象數組)k3L28資訊網——每日最新資訊28at.com

const array = [{id: 1}, {id: 2}, {id: 1}];const uniqueArray = Array.from(new Set(array.map(JSON.stringify)), JSON.parse);console.log(uniqueArray); // [{id: 1}, {id: 2}]

使用 Array.prototype.reduce()k3L28資訊網——每日最新資訊28at.com

const array = [{id: 1}, {id: 2}, {id: 1}];const uniqueArray = array.reduce((acc, current) => {    const isExist = acc.some(item => JSON.stringify(item) === JSON.stringify(current));    if (!isExist) acc.push(current);    return acc;}, []);console.log(uniqueArray); // [{id: 1}, {id: 2}]

上面都是使用了JSON.stringfy。但有個問題,如果引用數據的順序不一樣,轉的string就不等了。所以還是自己實現一個方法好一些。k3L28資訊網——每日最新資訊28at.com

使用自定義比較函數

這種方法適用于任何類型的數組,包括混合了基本數據類型和引用數據類型的數組。k3L28資訊網——每日最新資訊28at.com

function uniqueArray(array) {    const seen = new Map();    return array.filter(item => {        if (typeof item === 'object' && item !== null) {            const key = Object.keys(item).sort().map(k => `${k}:${item[k]}`).join('|');            if (!seen.has(key)) {                seen.set(key, true);                return true;            }        } else {            if (!seen.has(item)) {                seen.set(item, true);                return true;            }        }        return false;    });}const array = [1, 2, {id: 1}, {id: 2}, 1, {id: 1}];const uniqueArr = uniqueArray(array);console.log(uniqueArr); // [1, 2, {id: 1}, {id: 2}]

這個方法利用了 Map 數據結構的特性,用鍵來存儲數組中的元素,保證了元素的唯一性。對于對象,通過將屬性名排序并拼接成字符串來判斷是否重復。k3L28資訊網——每日最新資訊28at.com

如果都是引用結構,我們平時也可以使用 _.uniqBy() 方法去重,比如根據id什么的k3L28資訊網——每日最新資訊28at.com

const _ = require('lodash');const array = [{id: 1}, {id: 2}, {id: 1}];const uniqueArray = _.uniqBy(array, JSON.stringify);console.log(uniqueArray); // [{id: 1}, {id: 2}]

本文鏈接:http://www.tebozhan.com/showinfo-26-82509-0.html前端面試:你以為這只是一個簡單的數組去重嗎?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Java并發編程實戰:信號量Semaphore的使用技巧與示例

下一篇: 探索React 19:四個實用新鉤子功能

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 一加首款折疊屏!一加Open渲染圖出爐:罕見單手可握小尺寸

    8月5日消息,此前就有爆料稱,一加首款折疊屏手機將會在第三季度上市,如今隨著時間臨近,新機的各種消息也開始浮出水面。據悉,這款新機將會被命名為&ldquo;On
  • 分享六款相見恨晚的PPT模版網站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS網站旨在為全球Office用戶提供豐富的高品質原創PPT模板、實用文檔、數據圖表及個性化定制服務。優點:OfficePLUS是微軟官方網站,囊括PPT模板、Word模
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數據的地方,是數據源的一種,比如大家經常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數據,它既可以保
  • 如何使用JavaScript創建一只圖像放大鏡?

    譯者 | 布加迪審校 | 重樓如果您曾經瀏覽過購物網站,可能遇到過圖像放大功能。它可以讓您放大圖像的特定區域,以便瀏覽。結合這個小小的重要功能可以大大改善您網站的用戶體驗
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。可以用來發現應用程序、操作系統和網絡協議等中的漏洞或
  • 中國家電海外掘金正當時|出海專題

    作者|吳南南編輯|胡展嘉運營|陳佳慧出品|零態LT(ID:LingTai_LT)2023年,出海市場戰況空前,中國創業者在海外紛紛摩拳擦掌,以期能夠把中國的商業模式、創業理念、戰略打法輸出海外,他們依
  • 華為Mate60系列模具曝光:采用碩大圓形后置相機模組+拼接配色方案

    據此前多方爆料,今年華為將開始恢復一年雙旗艦戰略,除上半年推出的P60系列外,往年下半年的Mate系列也將迎來更新,有望在9-10月份帶來全新的華為Mate60
  • Android 14發布:首批適配機型公布

    5月11日消息,谷歌在今天凌晨舉行了I/O大會,本次發布會谷歌帶來了自家的AI語言模型PaLM 2、谷歌Pixel Fold折疊屏、谷歌Pixel 7a手機,同時發布了Androi
Top