去除数组重复元素

255 阅读1分钟

去除数组重复元素(Array.from+Set)

Set

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

## 例一
const set = new Set([1, 2, 3, 4, 4]);
[...set]
// [1, 2, 3, 4]

## 例二
const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]);
items.size // 5

## 例三
function divs () {
  return [...document.querySelectorAll('div')];
}

const set = new Set(divs());
set.size // 56

// 类似于
divs().forEach(div => set.add(div));
set.size // 56

Array.from()

# Array.from方法用于将两类对象转为真正的数组:类似数组的对象和可遍历的对象(包括 ES6 新增的数据结构 Set 和 Map)。
# 下面是一个类似数组的对象,Array.from将它转为真正的数组。

let arrayLike = {
    '0': 'a',
    '1': 'b',
    '2': 'c',
    length: 3
};

## ES5的写法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']

## ES6的写法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']


Array.from('hello')
// ['h', 'e', 'l', 'l', 'o']

let namesSet = new Set(['a', 'b'])
Array.from(namesSet) // ['a', 'b']

非es6去重

function fn(arr) {
    let obj = {};
    arr.forEach((item) => {
        obj[item] = '';// 只保存最后出现的键为准,从而去重
    })
    return Object.keys(obj)
}
function fn(arr) {
   return arr.filter((item, index, arr) =>arr.indexOf(item) === index)
   // 第一次出现的的元素下标才等于下标
}