JavaScript数组-去重

栏目: JavaScript · 发布时间: 5年前

内容简介:// 利用对象另种处理方式----------------------------------------------------------------------------------------------------------------参考文章&&强烈推荐:布罗利
const arr = [1, 2, 1, 2, 3, 4, 'l', 2, 1, 3, 'l'];
const newArr = arr.filter(function(ele, index, array) {
	return index === array.indexOf(ele)
});
console.log(newArr); // [ 1, 2, 3, 4, 'l' ]
复制代码

数组indexOf

var arr = [1, 2, 1, 2, 3, 4, 'l', 2, 1, 3, 'l'];
Array.prototype.unique2 = function() {

    var newArr = [];

    var len = this.length;

    for(var i = 0; i < len; i++) {

        var cur = this[i];

        if(newArr.indexOf(cur) === -1) {

            newArr[newArr.length] = cur;

        }

    }

    return newArr;

}
console.log(arr.unique2());  // (5) [1, 2, 3, 4, "l"]
复制代码

利用普通对象object去重(对象中key名不能有重复的)

Array.prototype.unique3 = function() {

    var newArr = this.slice(0);

    var len = this.length;

    var obj = {};

    for(var i = 0; i < len; i++) {

      var cur = newArr[i];

      if(obj[cur]) {

        newArr[i] = newArr[newArr.length - 1];

        newArr.length--;

        i--;

        continue;

      }

      obj[cur] = cur;

    }

  return newArr;

}

console.log(arr.unique3());  // (5) [1, 2, "l", 3, 4]

var arr = [1, 2, 1, 2, 3, 4, 'l', 2, 1, 3, 'l'];
复制代码

// 利用对象另种处理方式

Array.prototype.unique4 = function() {

    var json = {}

    var newArr = []

    var len = this.length

    for(var i = 0; i < len; i++) {

      var cur = this[i];

      if (typeof json[cur] === 'undefined') {

        json[cur] = true;

        newArr.push(cur)

      }

    }

  return newArr;

}
var arr = [1, 2, 1, 2, 3, 4, 'l', 2, 1, 3, 'l'];
console.log(arr.unique4());  // (5) [1, 2, 3, 4, "l"]
复制代码

双循环去重

Array.prototype.distinct1 = function () {
      var arr = this
      
      for (var i = 0; i < arr.length - 1; i++) {
        var cur = arr[i]
        for (var j = i + 1; j < arr.length;) {
          cur === arr[j] ? arr.splice(j, 1) : j++
        }
      }
      return arr;
    }

    var arr = [1, 2, 3, 4, 4, 1, 1, 2, 1, 1, 1]

    console.log(arr.distinct1()) // (4) [1, 2, 3, 4]
复制代码
/*
*
* 还是得调用“indexOf”性能跟方法1差不多,
* 实现思路:如果当前数组的第i项在当前数组中第一次出现的位置不是i,
* 那么表示第i项是重复的,忽略掉。否则存入结果数组。
* */
function uniq(array){
    var temp = [];
    for(var i = 0; i < array.length; i++) {
        //如果当前数组的第i项在当前数组中第一次出现的位置是i,才存入数组;否则代表是重复的
        if(array.indexOf(array[i]) == i){
            temp.push(array[i])
        }
    }
    return temp;
}

var aa = [1,2,"2",4,9,"a","a",2,3,5,6,5];
console.log(uniq(aa));
复制代码
var obj = {} 
   var ary = []
   for (var i = 0; i < arr.length; i++) {
      var cur = arr[i]
      if (!obj[cur]) {
        obj[cur] = true
        ary.push(cur)
      }
    }
    obj = null
复制代码
var arr = [1, 1, 2, 3, 2]
    var ary = []

    for (var i = 0; i < arr.length; i++) {
      var cur = arr[i]
      if (ary.indexOf(cur) === -1) {
        ary.push(cur)
      }
    }
复制代码
function unique(arr) {
      // [1, 1, 1, 2, 2, 2]
      arr = arr.slice(0) // 完全克隆一个新数组
      for (var i = 0; i < arr.length; i++) {
        var cur = arr[i]
        for (var j = i + 1; j < arr.length;) {
          cur === arr[j] ? arr.splice(j, 1) : j++
        }
      }
      return arr
    }
复制代码

----------------------------------------------------------------------------------------------------------------

参考文章&&强烈推荐:布罗利


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

啊哈C语言!逻辑的挑战(修订版)

啊哈C语言!逻辑的挑战(修订版)

啊哈磊 / 电子工业出版社 / 2017-1 / 49

《啊哈C语言!逻辑的挑战(修订版)》是一本非常有趣的编程启蒙书,《啊哈C语言!逻辑的挑战(修订版)》从中小学生的角度来讲述,没有生涩的内容,取而代之的是生动活泼的漫画和风趣幽默的文字。配合超萌的编程软件,《啊哈C语言!逻辑的挑战(修订版)》从开始学习与计算机对话到自己独立制作一个游戏,由浅入深地讲述编程的思维。同时,与计算机展开的逻辑较量一定会让你觉得很有意思。你可以在茶余饭后阅读《啊哈C语言!逻......一起来看看 《啊哈C语言!逻辑的挑战(修订版)》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具