// 初始化map的三种方式 const map1 = new Map() map1.set(60, ‘及格‘) map1.set(80, ‘良‘) map1.set(90, ‘优秀‘) // 第二种方式 set方法返回的是当前map对象,因此可以采用链式写法 const map2 = new Map().set(60, ‘及格‘).set(80, ‘良‘).set(90, ‘优秀‘) // 传入二维数组 const map3 = new Map([[60, ‘及格‘], [80, ‘良‘], [90, ‘优秀‘],]) console.log(map3,map2);//Map { 60 => ‘及格‘, 80 => ‘良‘, 90 => ‘优秀‘ }
错误初始化map的形式。坚决不要使用[]来定义key-value
let wrongMap = new Map() wrongMap[‘bla‘] = ‘blaa‘ wrongMap[‘bla2‘] = ‘blaaa2‘ console.log(wrongMap); //Map { bla: ‘blaa‘, bla2: ‘blaaa2‘ } 也是可以生成, 但是map的所有方法都不能使用,也就是这个错误的定义map对象方法 console.log(wrongMap.size); //0 console.log(wrongMap.get(‘bla‘)); //undefined
let myMap = new Map(); let keyObj = {}; let keyFunc = function () { }; let keyArr = [] let keyString = ‘a string‘; let strNum = ‘0‘ // 添加键 myMap.set(keyString, "和键‘a string‘关联的值"); myMap.set(keyObj, "和键keyObj关联的值"); myMap.set(keyArr, "和键keyArr关联的值"); myMap.set(keyFunc, "和键keyFunc关联的值"); myMap.set(strNum, "和键strNum关联的值"); myMap.set(null,‘和null key关联的值‘) myMap.set(undefined,‘和 undefined key关联的值‘) console.log(myMap.get(keyObj)) //和键keyObj关联的值 console.log(myMap.get(keyArr)) //和键keyArr关联的值 console.log(myMap.get(keyFunc)) // 键keyFunc关联的值 console.log(myMap.get(strNum)) //和键strNum关联的值 console.log(myMap.get(keyString)) // 键‘a string‘关联的值 console.log(myMap.get({})); //undefined console.log(myMap.get([])); //undefined console.log(myMap.get(function () { })); //undefined console.log(myMap.get(0)) //undefined console.log(myMap.get(‘a string‘)); // 键‘a string‘关联的值 console.log(myMap.get(null)); //和null key关联的值 console.log(myMap.get(undefined)); //和 undefined key关联的值
const map1 = new Map() map1.set(60, ‘及格‘) map1.set(80, ‘良‘) map1.set(90, ‘优秀‘) map1.set(90, ‘有优秀‘) console.log(map1.has(60)) //true console.log(map1.has(‘60‘)) //false console.log(map1.delete(80)); //true 删除已有的key 原map会改变,返回值true console.log(map1.size); //2 console.log(map1.delete(‘80‘)); //false 删除不存在的key 原map不改变,返回值false console.log(map1.size); //2
let [a, b, c] = [10, 20, 30] // console.log(a, b, c); 10 20 30 数组解构的例子 for (const item of map1) { console.log(item); } //解构了item for (const [key, value] of map1) { console.log(key, value); } for (const value of map1.values()) { console.log(value); //及格 | 良 |优秀 } for (const key of map1.keys()) { console.log(key); //60 80 90 } map1.forEach(value => console.log(value)) //如果回调函数只传一个参数 这个参数就是每次便利的map的值 map1.forEach((value, key) => { console.log(value, key); }) console.log([...map1]); //[ [ 60, ‘及格‘ ], [ 80, ‘良‘ ], [ 90, ‘优秀‘ ] ] console.log([...map1.values()]); //[ ‘及格‘, ‘良‘, ‘优秀‘ ] console.log([...map1.keys()]); //[ 60, 80, 90 ]
let first = new Map([ [1, ‘one‘], [2, ‘two‘], [3, ‘three‘], ]); let second = new Map([ [1, ‘uno‘], [2, ‘dos‘] ]); // 两个map对象合并,如果有重复的key,后面的key会覆盖前面的 let res = new Map([...first, ...second]) //Map { 1 => ‘uno‘, 2 => ‘dos‘, 3 => ‘three‘ } console.log(res);
map对象复制
重要:请记住,数据本身未被克隆。
let original = new Map([ [1, ‘one‘] ]); let clone = new Map(original); console.log(clone.get(1)); // one console.log(original === clone); // false. 浅比较 不为同一个对象的引用
// 初始化map的三种方式 const map1 = new Map() map1.set(60, ‘及格‘) map1.set(80, ‘良‘) map1.set(90, ‘优秀‘) // map实现过滤和改变数据形式 // new Map([...map1].filter([key, value]=> key > 60)) let res = [...map1].filter(([key, value]) => key > 60) const map2 = new Map(res) //Map { 80 => ‘良‘, 90 => ‘优秀‘ } // 一步到位 new Map([...map1].filter(([key, value]) => key > 60)) //Map { 80 => ‘良‘, 90 => ‘优秀‘ } // console.log(res1); let res2 = new Map([...map1].map(([key, value]) => [key * 10, `${value}~~~`])) console.log(res2); //Map { 600 => ‘及格~~~‘, 800 => ‘良~~~‘, 900 => ‘优秀~~~‘ }
原文:https://www.cnblogs.com/xiaoliziaaa/p/13334895.html