Set、Map数据类型
Set,一组key值的集合,key值不能重复。
{ let arr = [1,2,3,4,5]; let list = new Set(arr); let list1 = new Set(); list1.add(5); //使用add方法添加元素 }
Set类型的方法add、has、delete、clear;可遍历
for(let [key,value] of list.entries()){ console.log(key,value); }
{ //Set和Array对比,必须先找到索引,再进行操作 let set = new Set(); let arr = []; //增 set.add({t:1}); arr.push({t:1}); console.info('Set-arr-add',set,arr); //查 let set_exist = set.has({t:1});//false,对象引用 let arr_exist = arr.findIndex(item => item.t); console.info('Set-arr-find',set_exist,arr_exist); //改 set.forEach(item => item.t? item.t = 2:''); arr.forEach(item => item.t? item.t = 2:''); console.info('Set-arr-modify',set,arr); //删 set.forEach(item => item.t? set.delete(item):'') let index = arr.findIndex(item => item.t); arr.splice(index,1); console.info('Set-arr-delete',set,arr); }
Map类型(映射,键值对),key可以是任何数据类型。使用set方法添加元素。直接使用set()和delete()方法修改和删除元素。
let map = new Map(); let arr = ['123']; map.set(arr,456);//使用set添加属性及属性值,数组映射456 let map1 = new Map([['a',123],['b',456]]);//直接初始化
{ //Map、Set、Object let item = {t:1}; let map = new Map(); let set = new Set(); let obj = {}; //增 map.set('t',1); set.add(item); obj['t'] = 1; console.info(map,set,obj); //查 console.info({ map_exist:map.has('t'), set_exist:set.has(item), obj_exist:'t' in obj });//{map_exist: true, set_exist: true, obj_exist: true} //改 map.set('t',2); item.t = 2;//set存储的是item的地址 obj['t'] = 2; console.info(map,set,obj); //删除 map.delete('t');//成本最低 set.delete(item); delete obj['t']; console.info(map,set,obj); }
总结
使用顺序Map>Array,如果要求数据唯一性(不重复),则使用Set,尽量不适用Array和Object。