美文网首页
JS数组去重

JS数组去重

作者: 尤雨溪的大迷弟 | 来源:发表于2019-07-07 22:28 被阅读0次

1.ES6新增:Set

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set本身是一个构造函数,用来生成 Set 数据结构。

    var arr1 = [10,50,60,20,50,10,'haha','hi','haha'];

    // Array.from()方法可以将Set结构转换为数组Array.from(new Set(array))
    var arr2 = Array.from(new Set(arr1));

    console.log(arr2); // [10, 50, 60, 20, "haha", "hi"]

2.filter + indexOf

filter语法:var newArray = arr.filter(callback) 创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。返回值:一个新的、由通过测试的元素组成的数组;如果没有任何数组元素通过测试,则返回空数组。

例:

    var arr = [10,20,30,40,50];
    function fn1(data) {
        return data < 40;
    }
    var arr2 = arr.filter(fn1);
    console.log(arr2); // [10,20,30]

indexOf语法:返回在数组中可以找到的元素的第一个索引,如果不存在,则返回-1。
indexOf() 方法对大小写敏感!
如果要检索的字符串值没有出现,则该方法返回 -1。

例:

    var arr = [10,20,30,40,20];
    console.log(arr.indexOf(20)); // 1
    console.log(arr.indexOf(20,2)); // 4
    console.log(arr.indexOf(20,5)); // -1
    console.log(arr.indexOf(20,-1)); // 4
    console.log(arr.indexOf(20,-13213)); // 1

去重:

    var arr = [10,50,60,20,50,10,'haha','hi','haha'];
    let arr2 = arr.filter((item,index) => {
        console.log(item,index)
        return arr.indexOf(item) === index;
    })
    console.log(arr2); // [10, 50, 60, 20, "haha", "hi"]

3.sort + for循环

sort语法:用原地算法对数组的元素进行排序,并返回数组。排序算法现在是稳定的。默认排序顺序是根据字符串Unicode码点。
返回值:排序后的数组。请注意,数组已原地排序,并且不进行复制。
例:

    var arr = [10,70,20,20,80,50,40,50,40,100002,30,20,80,70,10,100002];
    arr = arr.sort();
    console.log(arr) // [10, 10, 100002, 100002, 20, 20, 20, 30, 40, 40, 50, 50, 70, 70, 80, 80]

将排序后的数组的第一个值添加进一个数组,然后将排序后的数组遍历下,每一个与前一个对比,值不一样的push进去,得到一个去重的新数组:

    var arr = [10,70,20,20,80,50,40,50,40,100002,30,20,80,70,10,100002];
    arr = arr.sort();
    var result = [arr[0]]
    for (let i=1; i< arr.length; i++) {
        arr[i] !== arr[i-1] && result.push(arr[i])
    }
    console.log(result) // [10, 100002, 20, 30, 40, 50, 70, 80]

4.indexOf + for循环

创建一个新的空数组,for循环遍历需要去重的数组,新数组调用indexOf方法逐一匹配旧数组里的值,返回-1时,push进新的数组:

    var arr = [10,70,20,20,80,50,40,50,40,100002,30,20,80,70,10,100002];
    var newarr = [];

    for (var i=0; i< arr.length; i++) {
        if (newarr.indexOf(arr[i]) === -1) {
            newarr.push(arr[i])
        }
    }
    console.log(newarr) // [10, 70, 20, 80, 50, 40, 100002, 30]

5.和对象结合

var arr = [1,1,2,2,5,4,3,4,3,5,6,6,8,8,9,9];
  var result = [];
  let obj = {};
  for (let i of arr) {
    if (!obj[i]) {
        result.push(i)
        obj[i] = 1;
    }
  }
  console.log(result)

相关文章

  • 数组的去重和数组中对象的去重

    数组中对象去重 方式1 jq方式 方式2 原生js方式 普通数组的去重 方式1 普通的数组去重js 方式2 Se...

  • js数组去重、对象数组去重

    普通数组去重 一、普通数组去重 方法一:遍历数组法 方法二:排序法 方法三:对象法 对象数组去重 方法一:将对象数...

  • js数组去重

    Set结构去重 ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 向 Se...

  • JS数组去重

    方法1:两层for循环,外层循环原数组,内层循环时进行比较。 方法2:利用对象的属性不能相同的特点去重 方法3:利...

  • js数组去重

  • js数组去重

    1.利用对象的属性唯一性去重 2.利用es6的Set

  • js数组去重

  • js 数组去重

  • JS数组去重

    方法一:遍历数组,建立新数组,利用indexOf判断是否存在于新数组中,不存在则push到新数组,最后返回新数组 ...

  • js数组去重

    方法一 (es6 set方法,简单粗暴) 方法二 创建空数组,用indexOf方法检索,没有的话插入新数组中 方...

网友评论

      本文标题:JS数组去重

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