美文网首页
JavaScript中的数组去重

JavaScript中的数组去重

作者: 王童孟 | 来源:发表于2018-06-20 09:11 被阅读0次

1. for循环+indexOf()

声明一个新数组,把数组中没有的元素push进去

function unique(arr){
  var newArr = []
  var item
    var len = arr.length
  for(var i = 0; i < len; i++){
    item = arr[i];
    if(newArr.indexOf(item) === -1){
      newArr.push(item)
    }
  }
  return newArr
}
测试代码
var arr1 = [1,2,1,null,null,undefined,undefined,'1','1',true,true]
unique(arr1) //  [1, 2, null, undefined, "1", true]

2. forEach()+indexOf()

没有for循环的效率高

function unique(arr){
  var newArr = []
  arr.forEach(function(item){
    if(newArr.indexOf(item) === -1){
      newArr.push(item)
    }
  })
  return newArr
}
测试代码
var arr1 = [1,2,1,null,null,undefined,undefined,'1','1',true,true]
unique(arr1) //  [1, 2, null, undefined, "1", true]

3. reduce()+indexOf()

function unique(arr){
  return arr.reduce(function(prev, next){
    if(prev.indexOf(next) === -1){
      prev.push(next)
    }
    return prev
  }, [])
}
测试代码
var arr1 = [1,2,1,null,null,undefined,undefined,'1','1',true,true]
unique(arr1) //  [1, 2, null, undefined, "1", true]

4. indexOf()判断

判断数组元素的indexOf索引判断和元素本身的索引是否相同

function unique(arr){
  var newArr = [arr[0]]
  var item
    var  len = arr.length
  for(var i = 1; i < len; i++){
    item = arr[i]
    if(arr.indexOf(item) === i){
      newArr.push(item)
    }
  }
  return newArr
}
测试代码
var arr1 = [1,2,1,null,null,undefined,undefined,'1','1',true,true]
unique(arr1) //  [1, 2, null, undefined, "1", true]

5. 排序去重sort()

数组排序,判断相邻项是否相等

function unique(arr){
  var newArr = [arr[0]]
  var item
  var len = arr.length
  arr.sort()
  for(var i = 1; i < len; i++){
    item = arr[i]
    if(item !== arr[i - 1]){
      newArr.push(item)
    }
  }
  return newArr
}
测试代码
var arr1 = [1,2,1,null,null,undefined,undefined,'1','1',true,true]
unique(arr1) //  [1, "1", 2, null, true, undefined]

6. 嵌套for循环

嵌套for循环,判断数组每一项是否相等

function unique(arr){
  var newArr = []
  var  len = arr.length
  for(var i = 0; i < len; i++){
    for(var j = i + 1; j < len; j++){
      if(arr[i] === arr[j]){
        j = ++i
      }
    }
    newArr.push(arr[i])
  }
  return newArr
}
测试代码
var arr1 = [1,2,1,null,null,undefined,undefined,'1','1',true,true]
unique(arr1) //  [2, 1, null, undefined, "1", true]

7. 临时对象

数组各项值当作对象的key,判断key对应的值是否存在,不存在push进新数组
特点:效率高,内存占用大

function unique(arr) {
  var ret = []
  var hash = {}

  for (var i = 0; i < arr.length; i++) {
    var item = arr[i]
    var key = typeof(item) + item
    if (hash[key] !== 1) {
      ret.push(item)
      hash[key] = 1
    }
  }
  return ret
}
测试代码
var arr1 = [1,2,1,null,null,undefined,undefined,'1','1',true,true]
unique(arr1) //    [1, 2, null, undefined, "1", true]

8. 集合转换

将数组转为集合,抛弃多余数值 ,利用Array.from将集合转为数组返回

function unique(arr){
  return Array.from(new Set(arr));
}
测试代码
var arr1 = [1,2,1,null,null,undefined,undefined,'1','1',true,true]
unique(arr1) //    [1, 2, null, undefined, "1", true]

9. 总结

建议看看参考链接,有些太高深

10. 参考链接

相关文章

  • JavaScript数组去重

    JavaScript中数组的常用操作之数组去重 方法一 方法二

  • JavaScript中的数组去重

    1. for循环+indexOf() 声明一个新数组,把数组中没有的元素push进去 2. forEach()+i...

  • JavaScript数组去重算法实例

    本文主要介绍了JavaScript数组去重算法,结合实例形式总结分析了JavaScript数组去重相关的读写、遍历...

  • javascript数组去重,数组对象去重

    利用Reduce去重 function unique(arr) {var obj = {};arr = arr.r...

  • JavaScript - 数组去重

    数组去重 1.for循环 2.0 少了多少行代码~~~ 3.0 indexOf 4.0 map/forEach E...

  • javascript 数组去重

    es6数组去重的方法

  • JavaScript 数组去重

    数组去重,一般都是在面试的时候才会碰到,一般是要求手写数组去重方法的代码。如果是被提问到,数组去重的方法有哪些?你...

  • JavaScript 数组去重

    博客地址:https://ainyi.com/#/32 单数组去重 filter + indexOf() filt...

  • JavaScript数组去重

    数组去重是一个js中在面试中经常被问到的问题,被问到是因为确实能够考察一些问题。如果不使用第三方的工具库,完全使用...

  • Javascript 数组去重

    数组去重 数组去重,一般需求是给你一个数组,调用去重方法,返回数值副本,副本中没有重复元素。一般来说,两个元素通过...

网友评论

      本文标题:JavaScript中的数组去重

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