js|将数组扁平化并去除其中重复数据,最终得到一个升序且不重复的数组/二维数组去重

本文介绍了两种方法在JavaScript中处理二维数组,包括使用Set方法去重和扁平化一维数组,以及通过键值对方式处理二维数组去重。Set方法无法处理二维数组的去重,而键值对方法利用对象作为对照实现二维数组去重。文章提供了错误示例和相关参考资料链接。

set方法

  • new一个Set对象,set方法去重,set方法只能去重一维数组
  • flat方法扁平化,Infinity规定数组长度的限制
  • sort方法正序排列,
  • 最后把对象转化成数组:
var arry =[1,25,15,[1,2,15,5],15,25,35,1];
var set =new Set(arry.flat(Infinity).sort((a,b)=>(a-b)));
var arr= [...set];
:
console.log(arr)// [1, 2, 5, 15, 25, 35]

错误示例:

arr.toString().split(",").sort((a,b)=>{ return a-b})

原因:

  1. split()方法是把字符串分割成字符数组,所以最后的排序是根据字符串的编码来排序,输出的也是字符串数组
  2. 这个方法也没有去重

键值对方法(二维数组)

这里是二维数组,二维数组去重比较特殊,不能使用set(Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。),实验结果set只能去掉第一个重复的数组(???)

  • 通过对象的键值对来实现二维数组去重,首先新建一个空对象,作为对照;
  • 然后遍历数组,对每个元素判断对象里面是否有对应的key,有的话,就代表这个元素被遍历到过,从原来数组里删掉这个重复的元素,然后i–(否则会漏过下一个元素)
  • 没有的话,把这个obj【key】=1,作为对照。
  • 出口:遍历完成,原数组重复元素被删除。
  let obj = {};//对照对象
  for (var i = 0; i < result2.length; i++) {
    // 判断当前项是否遍历过,是则删除,否存入obj以作对照

    if (obj[result2[i]]) {
      result2.splice(i, 1);
      i--; //数组删除了一项,要把i回退一下,不然会跳过下一项不去遍历
    } else {
      obj[result2[i]] = 1;
    }
  }
 

参考:Map和Set:https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014345007434430758e3ac6e1b44b1865178e7aff9082e000/
github原题:https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值