首页 > 其他分享 >12种解决数组去重的方案

12种解决数组去重的方案

时间:2022-11-29 23:00:43浏览次数:43  
标签:方案 arr 12 66 ary let 数组 unique

12种解决数组去重的方案_数据结构


兜个小圈 先总结一下我们数组的方法:

  • pop
  • push
  • shift
  • unshift
  • slice
  • splice
  • sort
  • reverse
  • concot
  • join
  • indexOf
  • lastIndexOf
  • map
  • forEach

还有其他可以处理数组的几个方法~

– includes:返回一个布尔值,如果存在返回false

– find:返回第一次找到的那一项

– some:返回一个布尔值,只要一个是true,就返回true

– every:返回一个布尔值,需要每一项都是true,才返回true

– filter:返回一个过滤后的新数组;如果返回true就留下,false就过滤掉

– reduce:收敛

下面我们进入正题~(希望能对你有帮助~小编有点皮!!哈哈哈哈哈哈)

01、set :不是一种数据类型,是一种数据结构;成员唯一

let arr = [12,1,12,3,1,88,66,9,66];
function unique(ary) {
let s = new Set(ary);
// Array.from : 将set数据结构转成真正的数组;
return Array.from(s)
}
unique(arr);

02、对象属性名不能重复

let arr = [12,1,12,3,1,88,66,9,66];
function unique(ary) {
let obj = {};
for(let i=0;i<ary.length;i++){
let cur = ary[i];
if(obj[cur]){
//ary.splice(i,1);// 导致数组塌陷
ary[i]=ary[ary.length-1];
ary.length--;// 删除最后一项
i--;
continue;
}
obj[cur]=cur;// 给obj新增键值对;属性名和属性值是一样的
}
}
unique(arr);
03、indexOf
let arr = [12,1,12,3,1,88,66,9,66];
function unique(ary) {
let newAry = [];
for(let i=0;i<ary.length;i++){
let cur = ary[i];
if(newAry.indexOf(cur)===-1){
newAry.push(cur);
}
}
return newAry;
}
unique(arr)
04、sort
let arr = [12,1,12,3,1,88,66,9,66];
function unique(ary) {
let a = ary.sort(function (a,b) {
return a-b;
});
for(let i=0;i<a.length;i++){
if(a[i]===a[i+1]){
a.splice(i+1,1);
i--;
}
}
return a;
}
unique(arr)

05、includes :包含;如果数组包含那一项,返回true;不包含返回false;

let arr = [12,1,12,3,1,88,66,9,66];
function unique(ary) {
let newAry = [];
let len = ary.length;
for(let i=0;i<len;i++){
let cur = ary[i];
if(!newAry.includes(cur)){
newAry.push(cur);
}
}
return newAry;
}
console.log(unique(arr));

06、hasOwnProperty : 检测属性名是否是对象的一个私有属性;返回一个布尔值;

let arr = [12,1,12,3,1,88,66,9,66];
function unique(ary) {
let obj = {};
return ary.filter(function (item,index,a) {
// item : 数组每一个成员
// index: 成员对应的索引
// a : 整个数组
// hasOwnProperty来校验的该属性是否出现过;
return obj.hasOwnProperty(typeof item+item)?false:obj[typeof item+item]=true;
if(obj.hasOwnProperty(typeof item+item)){
return false
}else{
obj[typeof item+item]=true;
return true;
}
})
}
console.log(unique(arr))

07、filter+indexOf

let arr = [12,1,12,3,1,88,66,9,66];
function unique(ary) {
return ary.filter(function (item,index,a) {
return ary.indexOf(item)===index;
})
}
console.log(unique(arr));

08、splice

let arr = [12,1,12,3,1,88,66,9,66];
function unique(ary) {
for(let i=0;i<ary.length;i++){
for(j=i+1;j<ary.length;j++){
if(ary[i]===ary[j]){
ary.splice(j,1);
j--;
}
}
}
return ary;
}
unique(arr);

09、递归

let arr = [12,1,12,3,1,88,66,9,66];
function unique(ary) {
let len= ary.length;
ary = ary.sort(function (a,b) {
return a-b;
});
function loop(index) {
if(index>=1){
if(ary[index]===ary[index-1]){
ary.splice(index,1);
}
loop(index-1)
}
}
loop(len-1);
return ary;
}
console.log(unique(arr));

10、Map :利用了Map数据结构存值的特点;

let arr = [12,1,12,3,1,88,66,9,66];
function unique(ary) {
let newAry =[];
let map = new Map();
for(let i=0;i<ary.length;i++){
if(!map.has(ary[i])){
map.set(ary[i],true);
newAry.push(ary[i]);
}
}
}
unique(arr);

11、reduce

let arr = [12,1,12,3,1,88,66,9,66];
function unique(ary) {
// reduce : 第一个是函数,第二个参数会传给第一次回调的prev;
return ary.reduce((prev,next)=>{
// 该函数返回值是下一次执行的prev;
return prev.includes(next)?prev:[...prev,next];
},[])
}
console.log(unique(arr));

12、类似于方法一的set,用了剩余运算符…

let  arr = [12,1,12,3,1,88,66,9,66];
let a = [...new Set(arr)];
console.log(a);

12种解决数组去重的方案_数据结构_02

12种解决数组去重的方案_数组_03

标签:方案,arr,12,66,ary,let,数组,unique
From: https://blog.51cto.com/u_15809510/5897251

相关文章

  • IIS发布程序,出现:请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理解决方案
    https://www.cnblogs.com/jarekpierre/p/11357859.html1、如果装了VS再装IIS必须得对.NETFramework重装一次,运行cmd,输入:C:\Windows\Microsoft.NET\Framework\V4.0.303......
  • JS 将伪数组转换成数组
    在 ​​JS​​ 中,伪数组 是非常常见的,它也叫 类数组。伪数组可能会给 ​​JS​​ 初学者带来一点困扰。本文将详细讲解 什么是伪数组,以及分别在 ​​ES5​​ 和 ......
  • 1123. 铲雪车
    #include<bits/stdc++.h>usingnamespacestd;#defineintlonglonglongdoubleans=0,a,b,c,d;signedmain(){cin>>a>>b;while(cin>>a>>b>>c>>d){......
  • 稀疏数组
    publicclassArrayDemo03{//稀疏数组publicstaticvoidmain(String[]args){//1.创建一个二维数组11*110:没有棋子1:黑棋2:白旗int[]......
  • leetcode-112-easy
    PathSumGiventherootofabinarytreeandanintegertargetSum,returntrueifthetreehasaroot-to-leafpathsuchthataddingupallthevaluesalongthe......
  • 微信大数据挑战赛:周星星方案汇总
    本文在比赛结束前将持续更新...5.23周星星方案已更新.多模态短视频分类是视频理解领域的基础技术之一,在安全审核、推荐运营、内容搜索等领域有着十分非常广泛的应用。一条......
  • 区间列表的交集 和相同的二元子数组 生成交替二进制字符串的最少操作数
    986.区间列表的交集List<int[]>list=newArrayList<>();intn=firstList.length;intm=secondList.length;inti=0;intj=0;while(i<n&&j<m){交......
  • lua获取数组的长度
    获取数组的长度对于一个数组我们通常可以使用#来获取其长度tabletest={1,2,3,5,7}print(#tabletest)------》5使用这两种方法都能得到这个数组的长度,但是如果tabletest=......
  • 产品版本发布的四种方案
    伴随着互联网技术的高速发展,产品功能的迭代速度也越来越快,年度、季度发布几乎成为历史,一线互联网公司都支持周度上万次发布。如此高频的发布,如果新版本不够稳定,或者新特性的......
  • leetcode 1976.到达目的地的方案数
    问题描述:你在一个城市里,城市由n 个路口组成,路口编号为 0 到 n-1 ,某些路口之间有双向 道路。输入保证你可以从任意路口出发到达其他任意路口,且任意两个路口之间......