当前位置:首页 > 技术分析 > 正文内容

JS数组去重(js 数组去重的四种方法)

ruisui883个月前 (02-03)技术分析15

1、前端数组去重的方法

目标数组:

let targetArr = ['1', 1, 2, 3, 2, 1, true, false, true, 'false', {}, {}];


l 方法一:Set去重


Set(集合)保留插入元素的顺序,并且只包含唯一值,new Set(targetArr)接收一个数组作为参数,通过new Set(targetArr)我们得到的是一个伪数组,可以通过ES6新增的属性...(扩展符)将它转化成为一个数组:

let resArr = [...new Set(targetArr)];


console.log(resArr);// ['1', 1, 2, 3, true, false, 'false', {…}, {…}]


l 方法2:双层循环+splice

循环遍历数组,如果发现有相同元素就使用splice将其删除,就可以得到一个没有重复项的新数组,具体代码示例如下:

let targetArr = ['1', 1, 2, 3, 2, 1, true, false, true, 'false', {}, {}];


let fun = arr => {

let len = arr.length;


//异常判断,如果arr是一个空数组,那么直接返回arr

if (!len) {

return arr;

}

//这里使用提前计算好的arr数组的长度,避免每次循环都要计算一次arr的长度

for(let i = 0; i < len; i++) {

for(let j = i+1; j < len; j++) {

if (arr[i] === arr[j]) {

/**splice删除一个元素后,其后面的元素索引值都会减1,

* 所以需要使用j--以保证下次循环能够从正确的位置开始,

* 同时使用len--,可以减少不必要的循环,性能得到优化**/

arr.splice(j, 1);

len--;

j--;

}

}

}

return arr;

};


l 方法三:filter + indexOf

let targetArr = ['1', 1, 2, 3, 2, 1, true, false, true, 'false', {}, {}];


/**

* filter是es6新增的操作数组的方法,它的作用就是过滤数组

* 筛选出复合某一条件的值并返回一个新数组

* 它接收一个函数作为参数,该函数共有三个参数

* item :当前元素的值

* index:当前元素的索引值

* array: 原数组也就是我们的目标数组targetArr

*/

let res = targetArr.filter((item, index, array) => {

/**

* indexOf返回在数组中首次遇到的等于指定值的索引

* 所以只要不是重复项那么必indexOf返回的值必然和index相等

* 只要是不相等的必然是重复项

* */

return array.indexOf(item) === index;

});


l 方法4:include

let targetArr = ['1', 1, 2, 3, 2, 1, true, false, true, 'false', {}, {}];


let fun = arr => {

let res = [];

let len = arr.length;

for (let i = 0; i < len; i++) {

/**

* includes是ES6中操作字符串和数组的方法,

* 它可以判断一个数组或者字符串中是否包含某个指定值

* 如果包含则返回true,反之返回false

* 它的语法是: arr.includes(searchValue,[start]);

* arr表示当前数组

* 接收两个参数

* searchValue: 表示要查询的元素

* [start]:开始查找的索引,该参数可有可无

*/

if (!res.includes(arr[i])) {

res.push(arr[i]);

}

}

return res;

};


l 方法5:map

let targetArr = ['1', 1, 2, 3, 2, 1, true, false, true, 'false', {}, {}];


let fun = arr => {

let tempMap = newMap();

let res = [];

let len = arr.length;

for (let i = 0; i < i + 1; i++) {

/**

* map是ES6中的一种数组结构,类似于对象,

* 但是它里面的值可以是各种数据类型,

* map有一个方法has()可以判断当前map中是否包含指定值

* map.has(searchValue)返回的true/false

*/

if (!tempMap.has(arr[i])) {

tempMap.set(arr[i], true);

res.push(arr[i])

}

}

}; 作者:Web前端-搬砖小黄 https://www.bilibili.com/read/cv23257936 出处:bilibili

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/675.html

分享给朋友:

“JS数组去重(js 数组去重的四种方法)” 的相关文章

Linux世界的多样性:yum和apt的对比,让你感受不同发行版的特色

yum和apt是两种常用的Linux软件包管理器,它们都可以用来安装、更新和删除软件包。但是,它们之间也有一些重要的区别,本文将对它们进行分析对比。yum是Yellowdog Updater Modified的缩写,它是基于RPM(Red Hat Package Manager)的软件包管理器,主要...

掌握版本控制:Git的那些常见用法与技巧

Git作为现代开发中最常用的版本控制系统,它的普及和高效性使得程序员几乎每天都在与它打交道。无论是个人项目,还是团队协作,Git都能帮助我们追踪代码的修改历史,保证代码版本的管理井井有条,并在多人协作时有效地避免冲突。本文将分享一些常见的Git用法与技巧,帮助你更好地掌握Git的强大功能,并提升你在...

你感动了吗?佳能超规格镜头 RF 24-105mm F2.8深度测评

如果要你选一支用作多题材创作的挂机镜头,那我相信很多人会选择24-105mm这个焦段的镜头。作为一支可以实现从广角到长焦的变焦镜头,24-105mm有着丰富的焦段选择。只是基于镜头体积以及光学结构上的限制,此前的24-105mm镜头只能恒定在F4的光圈。而佳能打破了这一限制,将实用焦段和恒定光圈完美...

三维家-系统快捷键使用

快键件使用:通过简单的键盘+鼠标操作,快速完成搭配。1.基础快捷键1) Ctrl+V:复制选中对象第一步:鼠标左击物体,按下Ctrl+V 即可复制选中对象。2) Ctrl+G:组合多选对象第一步:按住Ctrl键多选对象--按住Ctrl+G--确定。3) Ctrl+B:解组选中对象第一步:左击选中对象...

22《Vue 入门教程》VueRouter 路由嵌套

1. 前言本小节我们介绍如何嵌套使用 VueRouter。嵌套路由在日常的开发中非常常见,如何定义和使用嵌套路由是本节的重点。同学们在学完本节课程之后需要自己多尝试配置路由。2. 配置嵌套路由实际项目中的应用界面,通常由多层嵌套的组件组合而成。同样地,URL 中各段动态路径也按某种结构对应嵌套的各层...

分享15个基于Vue3.0全家桶的优秀开源项目

大家好,我是 Echa。今天来分享 15 个基于 Vue3.0 全家桶的优秀开源项目!1. Vue Admin Bettergithub : https://github.com/chuzhixin/vue-admin-bettervue admin better 对比其他来源 admin 框架有如...