es6中的map、set数据类型 2021.11.29

es6 新增的集合类型数据-Map和Set,他们是对原有的对象和数组类型的集合数据的补充。

1、map类型

map和对象 都是键值对集合的形式,但结构不太一样。对象中,键值对 是以`:`关联,map中一个键值对是一个数组。

{ 
// 对象的键值对结构
   name : '张三',
   gender : '男',
   age : 18
}
const entries = [ 
// map键值对结构
      ['name', '张三'],
      ['gender', '男'],
      ['age', 18]
];
// 上面定义的entries是接入map所需要的数据结构,称为入口
// 接下来要使用Map构造函数 将二维数组 转为map类型数据
const map = new Map(entries);

// map数据 存储在一个独立的空间-[[entries]]

// 它和对象数据不在一起 也不会原型链中的键冲突

Map的操作方法:

// 1、使用set 向集合中写入键值对

map2.set(f, 1);  // {function => 1}
map2.set(o, 2);  // {
   
   {} => 2}
map2.set(bool, 3); // {true => 3}

// 2、使用get读取某个键的值,因为map的键类型比较特殊,

// 它在取值时 是按照sameZero方案比较的,相等才能取到值

// f == function () {} 不成立

console.log(map2.get(f), map2.get(function () {})); 
// 1 undefined
// o == {} 不成立
console.log(map2.get(o), map2.get({})); // 2 undefined
// bool == true 成立
console.log(map2.get(bool), map2.get(true)); // 3 3

// 3、has检测是否存在某个键

console.log(map2.has(f), map2.has(function () {})); // true false
console.log(map2.has(o), map2.has({}));  // true false
console.log(map2.has(bool), map2.has(true)); // true true

// 4、delete删除某个键

map2.delete(true);

// 5、clear清空集合

map2.clear();

// 迭代map对象,map的数据是二维数组形式 每次迭代出来的是一维数组

map和数组的相互转化:

// 数组转化成map

const entries = [
   ['name', 'zhangsan'],
   ['gender', 'nan'],
   ['age', 18]
];
const map = new Map(entries)

// map转化成数组:根据迭代的规则 可以逐个取键值对,用spread展开运算 拿到每个键值对再放入一个数组中

const arr = [...map];
console.log(arr);

//map类型对象和普通对象的相互转化:

const o = {
   name : 'lisi',
   gender : 'nv',
   age : 19,
}
// 先将对象 转成二维数组形式
const data = Object.entries(o)
console.log(data);
// 将二维数组 作为入口数据给Map
console.log(new Map(data));

2、set数据类型

// Map类型,键值对数据的集合,可以看成是对象数据的补充和优化

// Set类型就是对数组的补充,它允许你存储任何类型的`唯一`值

// 普通的数组 也可以存储任意类型值,且允许重复,但Set集合元素是不重复
var arr = [1, true, 'a', function () {}, {}, 'a', 1];
// 使用Set构造函数 来创建set集合数据
const set = new Set(arr);
// set集合数据 也是存储在独立的空间, 具备map的多数特征
// 区别是map是键值对,set只有值 没有键
console.log(set);

set和数组的相互转化:

// 将数组 使用Set构造函数实例化转成set类型

const arr = [1, 'a', true, undefined];
const set2 = new Set(arr);
console.log(set2);

 // set类型转成数组,以数组方式展开set集合

const arr2 = [...set2];

数组去重:

const a = [1, 2, 3, 1, 1, 2];

// 1、借助Set的唯一性 实现去重

const tmp = new Set(a);
const a2 = [...tmp];

2、

const newArr = [];
        a.forEach(item => {
            // if (newArr.indexOf(item) < 0) {
            //     newArr.push(item)
            // }
            if (!newArr.includes(item)) {
                newArr.push(item)
            }
        });
        console.log(newArr);

// 3、手动去重 - 修改原数组

for (let j = 0; j < a.length - 1; j++) {
            for (let i = j+1; i < a.length; i++) {
                if (a[j] == a[i]) {
                    // 删除后面的数
                    a.splice(i, 1);
                    // 回退一位
                    i--;
                }
            }
        }
        console.log(a);

猜你喜欢

转载自blog.csdn.net/weixin_50163576/article/details/121619176
今日推荐