es6学习笔记整理(十)set-map与数组和对象的比较

以下所有的对比都是增,删,改,查的对比:

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

你可能感兴趣的:(es6学习笔记整理(十)set-map与数组和对象的比较)