前端面试题9(JavaScript数组去重)

news/2024/7/8 12:42:47 标签: 前端, javascript

在这里插入图片描述

1. 使用Set

ES6引入了Set数据结构,它只存储唯一的值,因此可以用来快速去重。

javascript">function uniqueWithSet(arr) {
    return [...new Set(arr)];
}

// 示例
console.log(uniqueWithSet([1, 2, 2, 3, 4, 4, 5])); // 输出: [1, 2, 3, 4, 5]

2. 使用indexOf或includes

遍历数组,利用indexOf或includes方法检查当前元素是否已存在于新数组中,如果不存在则添加进去。

javascript">function uniqueWithIndexOf(arr) {
    var result = [];
    arr.forEach(function(item) {
        if (result.indexOf(item) === -1) {
            result.push(item);
        }
    });
    return result;
}

// 或者使用includes
function uniqueWithIncludes(arr) {
    var result = [];
    arr.forEach(function(item) {
        if (!result.includes(item)) {
            result.push(item);
        }
    });
    return result;
}

// 示例
console.log(uniqueWithIndexOf([1, 2, 2, 3, 4, 4, 5])); // 输出: [1, 2, 3, 4, 5]

3. 使用filter方法

结合indexOf或includes方法,使用Array的filter方法进行去重。

javascript">function uniqueWithFilter(arr) {
    return arr.filter(function(item, index, array) {
        return array.indexOf(item) === index;
    });
}

// 示例
console.log(uniqueWithFilter([1, 2, 2, 3, 4, 4, 5])); // 输出: [1, 2, 3, 4, 5]

4. 使用reduce方法

reduce方法可以累积遍历过程中的结果,也可以用来去重。

javascript">function uniqueWithReduce(arr) {
    return arr.reduce((accumulator, current) => {
        return accumulator.includes(current) ? accumulator : [...accumulator, current];
    }, []);
}

// 示例
console.log(uniqueWithReduce([1, 2, 2, 3, 4, 4, 5])); // 输出: [1, 2, 3, 4, 5]

5. 对象键或Map去重

利用对象或Map的键唯一性来去重。

javascript">function uniqueWithObject(arr) {
    var obj = {};
    return arr.filter(function(item) {
        return obj.hasOwnProperty(typeof item + JSON.stringify(item)) ? false : (obj[typeof item + JSON.stringify(item)] = true);
    });
}

function uniqueWithMap(arr) {
    let map = new Map();
    return arr.filter(item => !map.has(item) && map.set(item, true));
}

// 示例
console.log(uniqueWithObject([1, '1', 2, 2, 3, 4, 4, 5])); // 输出: [1, "1", 2, 3, 4, 5]
console.log(uniqueWithMap([1, 2, 2, 3, 4, 4, 5])); // 输出: [1, 2, 3, 4, 5]

以上就是几种常见的JavaScript数组去重方法,每种方法都有其适用场景,可以根据具体需求选择合适的方法。


http://www.niftyadmin.cn/n/5537216.html

相关文章

Vulkan进阶-输入附件和Subpass以及One Pass Defer技术

原文链接:https://zhuanlan.zhihu.com/p/648162775 inputattachment和subpass是vulkan中比较有特色的模块,inputattachment可以用于管线的描述符中用来表示缓冲区的图像视图,而subpass讲的是renderpass中的子渲染流程,切换subpass…

【Vue】使用html、css实现鱼骨组件

文章目录 预览图组件测试案例预览图 组件 <template><div class="context"><div class="top"><div class="label-context"><div class="label" v-for="(item, index) in value" :key="ind…

机器学习——强化学习状态值函数V和动作值函数Q的个人思考

最近在回顾《西瓜书》的理论知识&#xff0c;回顾到最后一章——“强化学习”时对于值函数部分有些懵了&#xff0c;所以重新在网上查了一下&#xff0c;发现之前理解的&#xff0c;包括网上的大多数对于值函数的描述都过于学术化、公式化&#xff0c;不太能直观的理解值函数以…

uni-app使用ucharts地图,自定义Tooltip鼠标悬浮显示内容并且根据@getIndex点击事件获取点击的地区下标和地区名

项目场景&#xff1a; uni-app使用ucharts地图,自定义Tooltip鼠标悬浮显示内容并且根据getIndex点击事件获取点击的地区下标和地区名 例如&#xff1a; 问题描述 官方给的文档有限&#xff0c;需要自己下载地图json数据然后自己渲染和编写鼠标悬浮显示内容以及获取点击地址…

深入 Laravel 的错误处理与异常处理机制

引言 Laravel 是一个优雅而强大的 PHP Web 应用框架&#xff0c;它提供了一系列工具来帮助开发者处理应用中的错误和异常。了解 Laravel 的错误处理和异常处理机制对于构建健壮和用户友好的应用程序至关重要。本文将深入探讨 Laravel 如何实现错误和异常处理&#xff0c;并提供…

【3维BFS】个人练习-Leetcode-LCP 79. 提取咒文

题目链接&#xff1a;https://leetcode.cn/problems/kjpLFZ/ 题目大意&#xff1a;给一个矩阵matrix[][]&#xff0c;元素为小写英文字母。给一个字符串mantra&#xff0c;求从矩阵的(0,0)位置开始&#xff0c;可以移动&#xff08;上下左右&#xff09;或者提取字母&#xff…

使用deep修改前端框架中的样式

目录 1.deep的作用 2.使用方式 3.特别说明 scoped 的实现原理&#xff1a; !important 1.deep的作用 /deep/、::v-deep 和 :deep 都是用于穿透组件作用域的选择器。它们的主要目的是允许开发者在父组件中直接选择并样式化子组件内部的元素&#xff0c;即使这些元素被封装在…

数据分析入门指南:从基础概念到实际应用(一)

随着数字化时代的来临&#xff0c;数据分析在企业的日常运营中扮演着越来越重要的角色。从感知型企业到数据应用系统的演进&#xff0c;数据驱动的业务、智能优化的业务以及数智化转型成为了企业追求的目标。在这一过程中&#xff0c;数据分析不仅是技术的运用&#xff0c;更是…