• JavaScript Set 的用法与理解


    Set的使用场景
    Set和Array的区别是Set里的每一个元素都是唯一的,比如你有一个Array里面有4个元素[1, 2, 3, 1,4],如果你把它转换成Set,就变成[1, 2, 3,4]了。所以我们可以利用Set的这个特性做整数数组的去重。但要注意的是,如果你的数组是[{name: 1}, {name: 1}]这样的包含Object的数组,那么你把它转换为Set时并不能去重,因为虽然这两个对象看起来一样,但在Set看来,这个数组里的两个对象是两个完全不同的值,所以并不符合去重的要求。

    var arr = [1,1,2,2,3,3]
    var set = Array.from(new Set(arr))   //[1,2,3]

    //let set = [...new Set(arr)]
    let arr = [1,1,2,2,3,3]
    let set = [...new Set(arr)]
    let item = 3
    let itemIdx = 2

    查找快的原因:时间复杂度

    set.has(item)  //O(1)
    arr.indexOf(item)  // O(n)
    arr.includes(item)  // O(n)

    删除元素不需要知道索引

    set.delete(item)
    arr.splice(itemIdx, 1)

    插入元素

    set.add(item)
    arr.push(item)
    arr.unshift(item)

    去重

    let arr = [1,1,2,2,3,3]
    let unq = [...new Set(arr)]
    // [1,2,3]
    方法/属性功能介绍
    size 获取当前Set对象的长度
    add(value) 向当前Set对象中添加一个值,返回的是Set对象,所以支持链式写法
    delete(value) 删除当前Set对象中的一个值,返回一个布尔值,表示是否删除成功
    has(value) 检测这个value是否是当前Set对象的一个元素,通过返回的布尔值表示
    clear() 清除当前Set对象所有元素,没有返回值
    方法/属性功能介绍
    keys() 返回该Set对象键名的遍历器,等同values()
    values() 返回该Set对象键值的遍历器,等同keys()
    entries() 返回该Set对象键值对的遍历器(目前感觉没什么用)
    forEach() 使用回调函数遍历该Set对象的每个元素
     
     
    for(let i of set.keys()){
        console.log(i);
    }
    // 0, 1, 2
    
    set.forEach((value, key, _set) => {
        console.log(value, key, _set)
    })
     
     
  • 相关阅读:
    hdu 1429 胜利大逃亡(续)(BFS+位压缩)
    hdu 2955 Robberies
    POJ—Building a Space Station
    POJ-1287 Networking
    POJ-1251 Jungle Roads
    BFS ZOJ problem-1671 Waking Ant
    POJ-1308 Is It A Tree?
    poj 1611The Suspects
    POJ Wireless Network
    POJ 2524 Ubiquitous Religions
  • 原文地址:https://www.cnblogs.com/ddqyc/p/16201736.html
Copyright © 2020-2023  润新知