下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

web前端:js数组去重(最优方法)笔记

作者:帅气的日王     来源: https://www.cnblogs.com/riwang/archive/2020/03/10/12459679.h点击数:1132发布时间: 2020-03-16 20:40:49

标签: C语言js数组

Web开发

  在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

  资料:

  js世界-数组去重到底最快的是谁?

  RemoveduplicatevaluesfromJSarray[duplicate]

  大致思路

  遍历数组的各个项并判断某项是否重复。时间复杂度往往是O(n^2)

  优化:通过object,或者set,借助散列表查找的优秀性能来降低复杂度

  下面记录几种方法

  去重的是单一基础类型(number)可以用遍历+obj-keys

  如果有多类型的话,可能会出现

  1和字符串'1'被认为是重复的问题

  functionmerge2Array5(origin){

  constresult=[];

  consttagObj={};

  for(constioforigin){

  if(!tagObj[i]){

  result.push(i);

  tagObj[i]=1;

  }

  }

  returnresult;

  }

  去重的是多种基础类型

  用for+set

  functionmerge2Array6(origin){

  constresult=[];

  constset=newSet();

  for(constioforigin){

  if(!set.has(i)){

  result.push(i);

  set.add(i);

  }

  }

  returnresult;

  }

  代码量少的写法

  //方法1

  functionmerge2Array4(origin,target){

  returnArray.from(newSet([...origin,...target]))

  }

  //方法2

  functiononlyUnique(value,index,self){

  returnself.indexOf(value)===index;

  }

  //usageexample:

  vara=['a',1,'a',2,'1'];

  varunique=a.filter(onlyUnique);//returns['a',1,2,'1']

  最后

  stackoverflow的回答上有句话:

  However,ifyouneedanarraywithuniqueelements,whynotusesetsrightfromthebeginning?

  hhhhhhh:D

  关于可变长数组(VLA)的问题:原来的C89标准中是不允许可变长数组出现的,但是在C99标准中,加入了对VLA的支持,但是支持的编译器不多,而且由于栈溢出的安全问题,没有太多的人敢用这个可变长数组,所以在C11标准中又把它规定为可选实现的功能了。

赞(8)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程