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

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

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

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

前言

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

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

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

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

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

基本數據類型去重

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

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

使用 Set 數據結構(ES6)0hM28資訊網——每日最新資訊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()0hM28資訊網——每日最新資訊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()0hM28資訊網——每日最新資訊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()0hM28資訊網——每日最新資訊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 實現數組去重的方法:0hM28資訊網——每日最新資訊28at.com

使用 _.uniq() 方法0hM28資訊網——每日最新資訊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() 方法(使用自定義比較函數)0hM28資訊網——每日最新資訊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 數據結構,利用自定義比較函數(如果需要去重對象數組)0hM28資訊網——每日最新資訊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()0hM28資訊網——每日最新資訊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就不等了。所以還是自己實現一個方法好一些。0hM28資訊網——每日最新資訊28at.com

使用自定義比較函數

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

如果都是引用結構,我們平時也可以使用 _.uniqBy() 方法去重,比如根據id什么的0hM28資訊網——每日最新資訊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前端面試:你以為這只是一個簡單的數組去重嗎?

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

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

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

標簽:
  • 熱門焦點
  • 三言兩語說透設計模式的藝術-簡單工廠模式

    一、寫在前面工廠模式是最常見的一種創建型設計模式,通常說的工廠模式指的是工廠方法模式,是使用頻率最高的工廠模式。簡單工廠模式又稱為靜態工廠方法模式,不屬于GoF 23種設計
  • 從 Pulsar Client 的原理到它的監控面板

    背景前段時間業務團隊偶爾會碰到一些 Pulsar 使用的問題,比如消息阻塞不消費了、生產者消息發送緩慢等各種問題。雖然我們有個監控頁面可以根據 topic 維度查看他的發送狀態,
  • 十個簡單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強大而靈活的功能,用于修改或增強函數或類的行為。裝飾器本質上是一個函數,它接受另一個函數或類作為參數,并返回一個新的函數或類。它們通常用
  • 深度探索 Elasticsearch 8.X:function_score 參數解讀與實戰案例分析

    在 Elasticsearch 中,function_score 可以讓我們在查詢的同時對搜索結果進行自定義評分。function_score 提供了一系列的參數和函數讓我們可以根據需求靈活地進行設置。近期
  • 只需五步,使用start.spring.io快速入門Spring編程

    步驟1打開https://start.spring.io/,按照屏幕截圖中的內容創建項目,添加 Spring Web 依賴項,并單擊“生成”按鈕下載 .zip 文件,為下一步做準備。請在進入步驟2之前進行解壓。圖
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對帶有指定屬性的 HTML 元素設置樣式??梢詾閾碛兄付▽傩缘?HTML 元素設置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡單而
  • 這款新興工具平臺,讓你的電腦效率翻倍

    隨著信息技術的發展,我們獲取信息的渠道越來越多,但是處理信息的效率卻成為一個瓶頸。于是各種工具應運而生,都在爭相解決我們的工作效率問題。今天我要給大家介紹一款效率
  • 2納米決戰2025

    集微網報道 從三強爭霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺積電、三星,還是誓言重回先進制程領先地位的英特爾,甚至初成立不久的新
  • 三星推出Galaxy Tab S9系列平板電腦以及Galaxy Watch6系列智能手表

    2023年7月26日,三星電子正式發布了Galaxy Z Flip5與Galaxy Z Fold5。除此之外,Galaxy Tab S9系列平板電腦以及三星Galaxy Watch6系列智能手表也同期
Top 主站蜘蛛池模板: 肇庆市| 潍坊市| 和龙市| 古交市| 南召县| 越西县| 遂昌县| 姚安县| 沈阳市| 大悟县| 温泉县| 河曲县| 沙洋县| 龙山县| 天峻县| 泊头市| 抚远县| 应城市| 玉山县| 徐闻县| 介休市| 鸡泽县| 乌鲁木齐县| 和顺县| 镇雄县| 长武县| 余庆县| 金阳县| 南汇区| 天祝| 荥经县| 东山县| 北川| 江达县| 河北省| 安徽省| 宜宾县| 威宁| 新绛县| 邵阳市| 大姚县|