欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

set map symbol

程序员文章站 2023-02-04 11:10:53
set 声明 let set = new Set();即创建了一个空的set 赋值 let set = new Set(['张三','李四','王五']); 特性 似于数组,但它的一大特性就是所有元素都是唯一的,没有重复。 我们可以利用这一唯一特性进行数组的去重工作。 let set = new S ......

set

声明

let set = new set();即创建了一个空的set

赋值

let set = new set(['张三','李四','王五']);

特性

似于数组,但它的一大特性就是所有元素都是唯一的,没有重复。

我们可以利用这一唯一特性进行数组的去重工作。

let set = new set([1, 2, 2, 3, 4, 3, 5])
console.log(set) //set(5) {1, 2, 3, 4, 5}
let arr1 = [1, 2, 3, 4]
let arr2 = [2, 3, 4, 5, 6]
let set2 = new set([...arr1,...arr2])  //...是set转数组 后面有详细的
console.log(set2)//set(6) {1, 2, 3, 4, 5,6}

 记住一个属性和4个方法

属性

set.size  长度

方法

add  增加
console.log(set.add('刘德华').add('旋之华'));
delete  删除
console.log(set.delete('张三'));
console.log(set.delete('李四'));
console.log(set);
has 检测是否含有  返回true和false
console.log(set.has('张三'));
console.log(set.has('张三1'));
clear  清楚全部 没有返回值
console.log(set.clear()); // undefined
console.log(set);

 ste和array互转

数组转set
let set = new set(new array(7, 8, 9))
console.log(set)    // set(3) {7, 8, 9
set转数组
let set4 = new set([4, 5, 6])
console.log('方式一:', [...set4])            //方式一: (3) [4, 5, 6]      
console.log('方式二:', array.from(set4))    //方式二: (3) [4, 5, 6]

遍历

可以使用set实例对象的keys(),values(),entries()方法进行遍历。

由于set的键名和键值是同一个值,它的每一个元素的key和value是相同的,所有keys()和values()的返回值是相同的,entries()返回的元素中的key和value是相同的。

let set5 = new set([4, 5, 'hello'])
console.log(' useing set.keys()')
for(let item of set5.keys()) {
console.log(item)
}

console.log(' useing set.values()')
for(let item of set5.values()) {
console.log(item)
}

console.log(' useing set.entries()')
for(let item of set5.entries()) {
console.log(item)
}

结果

 useing set.keys()
5
hello

 useing set.values()

5
hello

 useing set.entries()
[ 4, 4 ]
[ 5, 5 ]
[ 'hello', 'hello' ]


map   和set大同小异

  1. 创建一个map

 let obj1 = {a: 1}, obj2 = {b: 2};
    const  map = new map([
        ['name', '张三'],
        ['age', 18],
        ['sex', '男'],
        [obj1, '今天天气很好'],
        [obj2, '适合敲代码'],
        [[1,2], 'hhh']
    ]);
   console.log(map); 
  console.log(map.size);
set map symbol
方法
set和get
    map.set('friends', ['赵六', '力气']).set(['dog'], '小花');
   console.log(map);
   console.log(map.get('name'));
   console.log(map.get(obj1));

  set map symbol

delete has clear

和set一样

// delete
   map.delete(obj1);                               //  删除指定的元素
   console.log(map.delete('xxxx'));
   console.log(map);
   // has
   console.log(map.has(obj1));  //有就返回true
   console.log(map.has(obj2));  //没有就返回false
   // clear
   map.clear();              //清空整个map
   console.log(map);

  

keys() values() entries()

let obj1 = {a: 1}, obj2 = {b: 2};
const map = new map([
['name', '张三'],
['age', 18],
['sex', '男'],
[obj1, '今天天气很好'],
[obj2, '适合敲代码'],
[[1,2], 'hhh']
]);
map.foreach(function (value, index) {
        console.log(index + ':' + value);
    })

 

遍历

let obj1 = {a: 1}, obj2 = {b: 2};
const map = new map([
['name', '张三'],
['age', 18],
['sex', '男'],
[obj1, '今天天气很好'],
[obj2, '适合敲代码'],
[[1,2], 'hhh']
]);

map.foreach(function (value, index) {
console.log(index + ':' + value);
})

//打印结果

name:张三
 age:18
75 sex:男
 [object object]:今天天气很好
5 [object object]:适合敲代码
1,2:hhh

注意事项

map.set({}, '呵呵呵呵呵');
 map.set({}, '哈哈哈哈');
 console.log({} === {});   //打印结果false

 对象是引用类型,他们在堆区存放的地址是不一样的 所以不全等!!  既然都做到这里了 那就来全面的复习复习 引用数据类型和基本数据类型的区别和堆栈的概念吧!! 

    地址: 

symbol

symbol是由es6规范引入的一项新特性,它的功能类似于一种标识唯一性的id。通常情况下,我们可以通过调用symbol()函数来创建一个symbol实例:

let s1 = symbol()

或者,你也可以在调用symbol()函数时传入一个可选的字符串参数,相当于给你创建的symbol实例一个描述信息:

let s2 = symbol('another symbol')

由于symbol是一种基础数据类型,所以当我们使用typeof去检查它的类型的时候,它会返回一个属于自己的类型symbol,而不是什么stringobject之类的:

typeof s1  // 'symbol'

每个symbol实例都是唯一的。因此,当你比较两个symbol实例的时候,将总会返回false

let s1 = symbol()
let s2 = symbol('another symbol')
let s3 = symbol('another symbol')
s1 === s2 // false
s2 === s3 // false

用法

最大的用法是用来定义对象的唯一属性名。

由于每一个 symbol 的值都是不相等的,所以 symbol 作为对象的属性名,可以保证属性不重名。

let sy = symbol("key1");
// 写法1
let syobject = {};
syobject[sy] = "kk";
console.log(syobject);    // {symbol(key1): "kk"}
// 写法2
let syobject = {
  [sy]: "kk"
};
console.log(syobject);    // {symbol(key1): "kk"}

  

const obj = {};
    obj.name = '张三';
    obj.name = '李四';
    obj[symbol('name')] = '张三';
    obj[symbol('name')] = '李四';
    console.log(obj);   //name: "李四"symbol(name): "张三"symbol(name): "李四"  对象设置相同name会覆盖,而symbol不会