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
    }
复制代码

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

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


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

查看所有标签

猜你喜欢:

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

Cascading Style Sheets 2.0 Programmer's Reference

Cascading Style Sheets 2.0 Programmer's Reference

Eric A. Meyer / McGraw-Hill Osborne Media / 2001-03-20 / USD 19.99

The most authoritative quick reference available for CSS programmers. This handy resource gives you programming essentials at your fingertips, including all the new tags and features in CSS 2.0. You'l......一起来看看 《Cascading Style Sheets 2.0 Programmer's Reference》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

html转js在线工具
html转js在线工具

html转js在线工具

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

HSV CMYK互换工具