美文网首页
数组去重(由简到繁)

数组去重(由简到繁)

作者: working_Poor | 来源:发表于2018-12-25 11:33 被阅读0次

提示: 以下方法都不会对对象去重

var array = [ {value: 2}, {value: 2}];
使用下面的任何一个方法,去重后的数组都会含有这两项。
原因是: 这两个对象内存指针不一样,被认为是不相同的。实际上就是不相同的
所以数组去重对对象无效是正确的。
1、ES6语法
  let arr = [1,1,2,3,'a',NaN,1,4,2,100,5,9,8,9,8,1,'a',99, 100,NaN];
  let newArr = [...new Set(arr)]
2、ES5 filter()
  let arr = [1,1,2,3,'a',NaN,1,4,2,100,5,9,8,9,8,1,'a',99, 100,NaN];
  // indexOf不能判断NaN, [NaN]indexOf('NaN') === -1;所以newArr中不会包含NaN!!!
  let newArr = arr.filter((value, index, arr) => {
    return arr.indexOf(value) === index
  })
3、ES3 indexOf()
  let arr = [1,1,2,3,'a',NaN,1,4,2,100,5,9,8,9,8,1,'a',99, 100, NaN],
    newArr=[];
    for(let i = 0, len = arr.length; i < len; i++) { 
        // indexOf不能判断NaN, [NaN]indexOf('NaN') === -1 ,所以newArr中会包含两个NaN!!!
        if(newArr.indexOf(arr[i]) === -1) {
            newArr.push(arr[i])
        }
  }
3+、ES6 includes()
  let arr = [1,1,2,3,'a',NaN,1,4,2,100,5,9,8,9,8,1,'a',99, 100,NaN],
       newArr=[];
  for(let i = 0, len = arr.length; i < len; i++) {
    if(!newArr.includes(arr[i])) {
        newArr.push(arr[i])
    }
  }
4、位置判断
  let arr = [1,1,2,3,'a',NaN,1,4,2,100,5,9,8,9,8,1,'a',99, 100,NaN],
    newArr = [];
  for(let i = 0, len = arr.length; i < len; i++) {
    // indexOf不能判断NaN, [NaN]indexOf('NaN') === -1, 所以newArr中不会包含NaN!!!
    if(arr.indexOf(arr[i]) === i) {
        newArr.push(arr[i])
    }
  }
5、先排序接着去重
   let arr = [1,1,2,3,'a',NaN,1,4,2,100,5,9,8,9,8,1,'a',99, 100,NaN]
   arr.sort()
   let newArr = [arr[0]]
   for(let i = 1, len = arr.length; i < len; i++) {
      //不能判断NaN, 所以newArr中会包含两个NaN!!!
      if(arr[i] !== newArr[newArr.length-1]) { 
          newArr.push(arr[i])
      }
   }
5+、先排序接着去重(使用Object.is())
  let arr = [1,1,2,3,'a',NaN,1,4,2,100,5,9,8,9,8,1,'a',99, 100,NaN]
  arr.sort()
  let newArr = [arr[0]]
  for(let i = 1, len = arr.length; i < len; i++) {
      if(!Object.is(arr[i],newArr[newArr.length-1])) {
          newArr.push(arr[i])
      }
  }
6、双重循环修改原数组
  let arr = [1,1,2,3,'a',NaN,1,4,2,100,5,9,8,9,8,1,'a',99, 100, NaN];
  for(let i = 0, len = arr.length-1; i <= len; i++) {
      for(let j = i+1, len = arr.length-1; j <= len; j++) {
          if(Object.is(arr[i], arr[j])) {
              arr.splice(j, 1)
              j--
          }
      }
  }

相关文章

  • 数组去重(由简到繁)

    提示: 以下方法都不会对对象去重 1、ES6语法 2、ES5 filter() 3、ES3 indexOf() 3...

  • 由简到繁,由繁到简

    研究报告是对研究最终成果的报告,在课题组所提交的所有结题材料中,是体现研究学术水平的最重要的资料。对课题人来说,解...

  • 由繁到简

    我家先生我唤他为简先生,但他不姓简。刚开始追我那会他问我,你知道我叫什么名字吗?我说知道啊。然后我把给他的备注名截...

  • 由简到繁

    每天晚上找到事情做打发时间也挺好的

  • 由繁到简

    最近感觉写作还是没上来乐趣,今天看到那么多的群,那么多的人是我的好友想想都头大,自己目前大脑脑容量有限,就...

  • 大道至简

    由简到繁易,有繁到简难吗? 成功等于时间+行动,不断检讨,修正您的 行动,加上时间,您一定会成功。 成功不稀奇,重...

  • 快速进入状态

    由易到难,由简到繁

  • 布尔运算的学习

    由繁到简,由简而繁

  • 简单的生活

    由简到繁易,有繁到简难,简单生活,快乐健康伴随您!

  • 明智之举

    等你由繁到简的人,早已简过。 繁不自知,简不如人。

网友评论

      本文标题:数组去重(由简到繁)

      本文链接:https://www.haomeiwen.com/subject/nfoxlqtx.html