以下所有的对比都是增,删,改,查的对比:
Map与Array的对比
首先声明,声明之后有详细的使用方法对比,代码如下:
let map = new Map();
let array = [];
增
map.set('a',1);
map.set('b',2);
array.push({a:1},{b:2});
console.log(map);//Map(2) {"a" => 1, "b" => 2}
console.log(array);//{a: 1, b: 2}
查
let map_exist = map.has('a');
let arr_exist = array.find(item=>item.a);
console.log(map_exist);//true
console.log(arr_exist);//{a: 1}
改
map.set('a',3);
array.forEach(item=>item.a?item.a=3:'');
console.log(map);//Map(2) {"a" => 3, "b" => 2}
console.info(array);//{a: 1}
删
map.delete('a');
var index = array.findIndex(item=>item.a);
array.splice(index,1);
console.log(map);//Map(1) {"b" => 2}
console.info(array);//{b: 2}
小结:map的操作方法要比数组简单很多
Set与Array的对比
增
let set=new Set();
let array = [];
set.add({'a':1});
set.add({'b':2});
array.push({'a':1},{'b':2});
console.log(set);//{a: 1},{b: 2}
console.log(array);//{a: 1},{b: 2}
查
let set_exist = set.has({a: 1});
let arr_exist = array.find(item=>item.a);
console.log(set_exist);//false
console.log(arr_exist);//{a: 1}
改
set.forEach(item=>item.a?item.a=3:'');//不能用add
array.forEach(item=>item.a?item.a=3:'');
console.log(set);//{a: 3},{b: 2}
console.info(array);//{a: 3},{b: 2}
删
set.forEach(item=>item.a?set.delete(item):'');//不能用delete
var index = array.findIndex(item=>item.a);
array.splice(index,1);
console.log(set);//Set(1) {"b" => 2}
console.info(array);//{b: 2}
小结:前面两种之所以不能用add和delete,是因为set的元素没有事先声明,所以只能使用循环实现,尽管这样,根据以上的实践,还是set比较方便。
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.log(map);//{t: 1}
console.log(set);//{t: 1}
console.log(obj);//{t: 1}
查
console.info({
map:map.has('t'),
set:set.has(item),
obj:'t' in obj
});//{map: true, set: true, obj: true}
改
map.set('t',2);
item.t = 2;
obj['t'] = 2;
console.log(map);//Map(1){t: 2}
console.log(set);//Set(1){t: 2}
console.log(obj);//{t: 2}
删
map.delete('t');
set.delete(item);
delete obj['t'];
console.log(map);//Map(0){}
console.log(set);//Set(0){}
console.log(obj);//{}
总结:
在整个的数据开发过程中,涉及到数据结构,能使用map不使用数组,考虑数据的唯一性, 考虑使用set,放弃object和数组,总之,优先使用map和set







网友评论