js 数据去重

1.最容易想到的方案 支持IE8+

function unique(arr) {
  var ret = []

  for (var i = 0; i < arr.length; i++) {
    var item = arr[i]
    if (ret.indexOf(item) === -1) {
      ret.push(item)
    }
  }

  return ret
}

2.IE6-IE8 for两次 性能一般

var indexOf = [].indexOf ?
    function(arr, item) {
      return arr.indexOf(item)
    } :
    function indexOf(arr, item) {
      for (var i = 0; i < arr.length; i++) {
        if (arr[i] === item) {
          return i
        }
      }
      return -1
    }

function unique(arr) {
  var ret = []

  for (var i = 0; i < arr.length; i++) {
    var item = arr[i]
    if (indexOf(ret, item) === -1) {
      ret.push(item)
    }
  }

  return ret
}

ES6写法

用之前先了解下Array.from()

Array.from()将类数组转换成数组

let arrayLike = {
    0: 'wen', 
    1: '18',
    2: '男',
    3: ['haha','hehe','heihei'],
    'length': 4
}
let arr = Array.from(arrayLike)
console.log(arr) // ['wen','18','男',['haha','hehe','heihei']]

如果上面数据没有length属性呢?

let arrayLike = {
    0: 'wen', 
    1: '18',
    2: '男',
    3: ['haha','hehe','heihei'],
}
let arr = Array.from(arrayLike)
console.log(arr) // []空数组

我们得到了一个结论 类数组想要通过 Array.form()转换
l e n g t h l e n g t h

将字符串转换为数组

let  str = 'hello world!';
console.log(Array.from(str)) ///["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]

Array.from还可以接受第二个参数,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。如下:

let arr = [12,34,56,78,9,520]
let set = new Set(arr)
console.log(Array.from(set, item => item + 1)) 
//[13, 35, 57, 79, 10, 521]

1.Set + Array.from() 只能去重一阶数组

A r r a y . f r o m ( ) ( a r r a y l i k e o b j ) ( i t e r a b l e o b j e c t s e g : M a p S e t )

 let arr = Array.from(new Set([1,2,3,5,7,1,2,1]))
 console.log(arr); //[1,2,3,5,7]
 console.log(arr.length);//5
 for (let i = 0; i < arr.length; i++) {
    console.log(arr[i]);
    //1
    //2
    //3
    //5
    //7
 };

这个例子说明了转换之后的数据可以遍历 有长度。

 let arr = Array.from(new Set([1,2,3,5,7,1,2,1,[1,1,1]]))
 console.log(arr);
 /[,2,3,5,7,[1,1,1]]

二阶数组去重不能用Set+Array.form()

2 …[拓展运算符] + Set

 let arr = [...new Set([1,2,3,5,7,1,2,1])] 
console.log(arr);// [1,2,3,5,7]

猜你喜欢

转载自blog.csdn.net/wen_binobject/article/details/80097868