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

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

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

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

前言

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

后來我看到這樣的數(shù)據(jù),忽然意識到,之前的面試怕不是草率了,完全沒考慮復(fù)雜數(shù)據(jù)結(jié)構(gòu),難怪他聽完不太滿意的樣子。kj428資訊網(wǎng)——每日最新資訊28at.com

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

在平時的開發(fā)過程中這樣的數(shù)據(jù)應(yīng)該少見,絕大部分的數(shù)組中數(shù)據(jù)格式應(yīng)該保持一致,特殊情況就不管他了。kj428資訊網(wǎng)——每日最新資訊28at.com

今天再來出一期數(shù)組去重的方式。kj428資訊網(wǎng)——每日最新資訊28at.com

基本數(shù)據(jù)類型去重

確實有多種方式,比如set結(jié)構(gòu)轉(zhuǎn)一下,lodash提供的uniq方法,或者自己利用其他方式實現(xiàn)也是很多的。今天就介紹幾個kj428資訊網(wǎng)——每日最新資訊28at.com

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

使用 Set 數(shù)據(jù)結(jié)構(gòu)(ES6)kj428資訊網(wǎng)——每日最新資訊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()kj428資訊網(wǎng)——每日最新資訊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()kj428資訊網(wǎng)——每日最新資訊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 循環(huán)和 Array.prototype.indexOf()kj428資訊網(wǎng)——每日最新資訊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 工具庫,提供了許多實用的函數(shù)來簡化開發(fā)過程。它也包含了一些用于數(shù)組去重的方法。以下是幾種利用 Lodash 實現(xiàn)數(shù)組去重的方法:kj428資訊網(wǎng)——每日最新資訊28at.com

使用 _.uniq() 方法kj428資訊網(wǎng)——每日最新資訊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() 方法(使用自定義比較函數(shù))kj428資訊網(wǎng)——每日最新資訊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. 數(shù)組包含引用數(shù)據(jù)類型:

使用 Set 數(shù)據(jù)結(jié)構(gòu),利用自定義比較函數(shù)(如果需要去重對象數(shù)組)kj428資訊網(wǎng)——每日最新資訊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()kj428資訊網(wǎng)——每日最新資訊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。但有個問題,如果引用數(shù)據(jù)的順序不一樣,轉(zhuǎn)的string就不等了。所以還是自己實現(xiàn)一個方法好一些。kj428資訊網(wǎng)——每日最新資訊28at.com

使用自定義比較函數(shù)

這種方法適用于任何類型的數(shù)組,包括混合了基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的數(shù)組。kj428資訊網(wǎng)——每日最新資訊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 數(shù)據(jù)結(jié)構(gòu)的特性,用鍵來存儲數(shù)組中的元素,保證了元素的唯一性。對于對象,通過將屬性名排序并拼接成字符串來判斷是否重復(fù)。kj428資訊網(wǎng)——每日最新資訊28at.com

如果都是引用結(jié)構(gòu),我們平時也可以使用 _.uniqBy() 方法去重,比如根據(jù)id什么的kj428資訊網(wǎng)——每日最新資訊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.www897cc.com/showinfo-26-82509-0.html前端面試:你以為這只是一個簡單的數(shù)組去重嗎?

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

上一篇: Java并發(fā)編程實戰(zhàn):信號量Semaphore的使用技巧與示例

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

標(biāo)簽:
  • 熱門焦點
  • 一加Ace2 Pro官宣:普及16G內(nèi)存 引領(lǐng)24G

    一加官方今天繼續(xù)為本月發(fā)布的新機一加Ace2 Pro帶來預(yù)熱,公布了內(nèi)存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領(lǐng),還有呢?#一加Ace2Pro#,2023 年 8 月,敬請期待。”同時
  • vivo TWS Air開箱體驗:真輕 臻好聽

    在vivo S15系列新機的發(fā)布會上,vivo的最新款真無線藍(lán)牙耳機vivo TWS Air也一同發(fā)布,本次就這款耳機新品給大家?guī)硪粋€簡單的分享。外包裝盒上,vivo TWS Air保持了vivo自家產(chǎn)
  • 三分鐘白話RocketMQ系列—— 如何發(fā)送消息

    我們知道RocketMQ主要分為消息 生產(chǎn)、存儲(消息堆積)、消費 三大塊領(lǐng)域。那接下來,我們白話一下,RocketMQ是如何發(fā)送消息的,揭秘消息生產(chǎn)全過程。注意,如果白話中不小心提到相關(guān)代
  • 微軟邀請 Microsoft 365 商業(yè)用戶,測試視頻編輯器 Clipchamp

    8 月 1 日消息,微軟近日宣布即將面向 Microsoft 365 商業(yè)用戶,開放 Clipchamp 應(yīng)用,邀請用戶通過該應(yīng)用來編輯視頻。微軟于 2021 年收購 Clipchamp,隨后開始逐步整合到 Microsof
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元&ldquo;人在職場,應(yīng)該選擇什么樣的著裝?&rdquo;近日,在網(wǎng)絡(luò)上,一個與著裝相關(guān)的帖子引發(fā)關(guān)注,在該帖子里,一位在高級寫字樓亞洲金
  • 機構(gòu)稱Q2國內(nèi)智能手機銷量同比下滑4% vivo份額重回第1

    7月29日消息,根據(jù)市場調(diào)查機構(gòu)Counterpoint Research公布的最新報告,2023年第2季度中國智能手機銷量同比下降4%,創(chuàng)新自2014年以來第2季度銷量新低。報
  • 自研Exynos回歸!三星Galaxy S24系列將提供Exynos和驍龍雙版本

    年初,全新的三星Galaxy S23系列發(fā)布,包含Galaxy S23、Galaxy S23+和Galaxy S23 Ultra三個版本,全系搭載超頻版驍龍8 Gen 2,雖同樣采用臺積電4nm工藝制
  • iQOO 11S新品發(fā)布會

    iQOO將在7月4日19:00舉行新品發(fā)布會,推出杭州亞運會電競賽事官方用機iQOO 11S。
  • SN570 NVMe SSD固態(tài)硬盤 價格與性能兼具

    SN570 NVMe SSD固態(tài)硬盤是西部數(shù)據(jù)發(fā)布的最新一代WD Blue系列的固態(tài)硬盤,不僅閃存技術(shù)更為精進(jìn),性能也得到了進(jìn)一步的躍升。WD Blue SN570 NVMe SSD的包裝外
Top 主站蜘蛛池模板: 昌乐县| 枞阳县| 巴里| 汤阴县| 昌黎县| 杭锦后旗| 西安市| 武胜县| 东兰县| 禹州市| 乌兰察布市| 大化| 双桥区| 徐水县| 安顺市| 石台县| 乐亭县| 山阴县| 明光市| 饶平县| 安多县| 华亭县| 涟水县| 马鞍山市| 镇康县| 镇雄县| 玉林市| 临朐县| 鸡泽县| 廊坊市| 仙桃市| 常德市| 许昌县| 华池县| 龙游县| 青川县| 句容市| 兴仁县| 阿尔山市| 从化市| 龙陵县|