通过增删改查对比Array,Map,Set,Object的使用成本和实现方式

1.Array 和 Map 对比

复制代码
{ // array and map 增 查 改 删
    let map = new Map();
    let arr = [];

    //
    map.set('a', 1);
    arr.push({'a': 1});
    console.log('add', map, arr); // add Map(1) {"a" => 1}  [{a: 1}]

    //
    let map_exist = map.has('a');
    let arr_exist = arr.find(item => item.a);
    console.log('exist', map_exist, arr_exist); // exist true {a: 1}

    //
    map.set('a', 2);
    arr.forEach(item => item.a ? item.a = 2 : '');
    console.log('mod', map, arr); // mod Map(1) {"a" => 2} [{a: 2}]

    // 删除
    map.delete('a');
    let index = arr.findIndex(item=>item.a);
    arr.splice(index, 1);
    console.log('del', map, arr); // del Map(0) {} []
}
复制代码

2.Set 和 Array 对比

复制代码
{ // Set and array
    let set = new Set();
    let arr = [];
    let o = {a: 1};

    //
    set.add(o);
    arr.push(o);
    console.info('add', set, arr); // add Set(1) {{a: 1}} [{a: 1}]

    //
    let set_exist = set.has(o);
    let arr_exist = arr.find(item => item.a);
    console.log('exist', set_exist, arr_exist); // exist true {a: 1}

    // 改  Set存储对象的时候存储的是引用,所以修改时直接修改数据元素
    set.forEach(item=>item.a? item.a =2:'');
    arr.forEach(item => item.a ? item.a = 2 : '');
    console.info('mod', set, arr); // mod Set(1) {{a: 2}} [{a: 2}]

    //
    set.forEach(item=>item.a? set.delete(item):'');
    let index = arr.findIndex(item => item.a);
    arr.splice(index, 1);
    console.log('del', set, arr); // del Set(0) {} []
}
复制代码

3. Map 和 Set 和 Object 对比

复制代码
{ // map set object 注意对比使用成本和实现方式
    let item = {a: 1};
    let map = new Map();
    let set = new Set();
    let obj = {};

    //
    map.set('a', 1);
    set.add(item);
    obj['a'] = 1;
    console.log('add', map, set, obj); // add Map(1) {"a" => 1} Set(1) {{a: 1}} {a: 1}

    //
    console.log({
        map_exist: map.has('a'),
        set_exist: set.has(item),
        obj_exist: 'a' in obj
    }); // {map_exist: true, set_exist: true, obj_exist: true}

    //
    map.set('a', 2);
    item.a = 2; // set不参与,因为对象存储的是个引用,直接修改元素,没有存储数据元素item可使用forEach遍历修改
    obj.a = 2;
    console.log('mod', map, set, obj); // mod Map(1) {"a" => 2} Set(1) {{a: 2}} {a: 2}

    //
    map.delete('a');
    set.delete(item);
    delete obj.a;
    console.log('del', map, set, obj); // del Map(0){}  Set(0){}  {}
}
复制代码

4.总结(基于es6):

从语义上map最好,set需要依赖一个数据元素item语义上和map差不多,使用成本上map优先。
综上所述:在开发过程中涉及数据结构时能使用map不使用数组,考虑数据唯一性时使用set,放弃使用数组和object作为数据存储。
posted @   小方块的世界  阅读(587)  评论(0)    收藏  举报
编辑推荐:
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 一文彻底搞懂 MCP:AI 大模型的标准化工具箱
· 电商平台中订单未支付过期如何实现自动关单?
阅读排行:
· Cursor:一个让程序员“失业”的AI代码搭子
· 博客园2025新款「AI繁忙」系列T恤上架
· .NET 阻止Windows关机以及阻止失败的一些原因
· 航天二院校园招聘面试记录:二八三厂
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(6)
点击右上角即可分享
微信分享提示