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

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

ruisui885个月前 (02-03)技术分析20

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 数组去重的四种方法)” 的相关文章

vue3父子组件传对象,子组件访问修改父组件对象中的属性值

在Vue 3中,父子组件之间的数据传输通常通过props和emit进行。父组件可以通过props向下传递数据给子组件,子组件则可以通过emit向上通知父组件更新数据。如果需要在子组件中修改父组件对象中的属性值,可以使用一个名为ref的Vue 3新特性。以下是一个示例,演示了如何在Vue 3中实现父子...

Gitlab+Jenkins通过钩子实现自动部署web项目,图文详细教程

扩展参考:Jenkins+Gitlab通过脚本自动部署回滚web项目至集群 一:基础环境介绍及准备1):Gitlab服务器:ubuntu 192.168.152.131 ---参考搭建:Linux安装gitlab,docker安装gitlab教程2):Jenkins服务器:ubunu 192.168...

学无止境:Git 如何优雅地回退代码

来源:https://zhenbianshu.github.io前言从接触编程就开始使用 Git 进行代码管理,先是自己玩 Github,又在工作中使用 Gitlab,虽然使用时间挺长,可是也只进行一些常用操作,如推拉代码、提交、合并等,更复杂的操作没有使用过,看过的教程也逐渐淡忘了,有些对不起 L...

软件测试-性能测试专题方法与经验总结

本文 从 性能测试流程,性能测试指标,性能监测工具,性能测试工具,性能测试基线,性能测试策略,性能瓶颈分析方法几个维度,进行知识总结和经验分享;详细见下图总结,欢迎大家补充;性能测试经验与思考1. 性能测试流程1.1. 性格规格评审1.2. 资源排期1.2.1. 人力资源1.2.2. 时间计划· 性...

壹啦罐罐 Android 手机里的 Xposed 都装了啥

这是少数派推出的系列专题,叫做「我的手机里都装了啥」。这个系列将邀请到不同的玩家,从他们各自的角度介绍手机中最爱的或是日常使用最频繁的 App。文章将以「每周一篇」的频率更新,内容范围会包括 iOS、Android 在内的各种平台和 App。本期继续歪楼,由少数派撰稿作者@壹啦罐罐介绍他正在使用的...

2024最新版:前端性能优化方案汇总

前端训练营:1v1私教,终身辅导计划,帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~Hello,大家好,我是 Sunday。前端性能优化一直是很多同学非常关注的问题,在日常的面试中也是经常会被问到的点。所以今天咱们就花一点时间来了解一下2024最新的...