11.4、有关Map的遍历应用


        /*
            结合数组的 map 方法、filter方法,可以实现 Map 的遍历和过滤 (Map 本身没有 map 和 filter 方法)
        */

        const m1 = new Map().set(1, 'a').set(2, 'b').set(3, 'c')

        console.log(m1)  // Map(3) {1 => "a", 2 => "b", 3 => "c"}

        const m2 = new Map(
            [...m1].filter(([k, v]) => k < 3)
        )

        console.log(m2)  // Map(2) {1 => "a", 2 => "b"}

        const m3 = new Map(
            [...m1].map(([k, v]) => [k * 2, '_' + v])
        )

        console.log(m3)  // Map(3) {2 => "_a", 4 => "_b", 6 => "_c"}




        // 此外,Map 还有一个 forEach 方法,与数组的 forEach 方法类似,也可以实现遍历   ---> 难理解 p222








        /*
            11.3.4 与其他数据结构的互相转换

                + Map 转为数组
                + 数组转为 Map
                + Map 转为对象
                + 对象转为 Map
                + Map 转为 JSON
                + JSON 转为 Map
        */

        // Map 转为数组

        // 前面已提过,Map 转为数组最简便的方法就是使用扩展运算符(...)

        const myMap1 = new Map()
        .set(true, 7)
        .set({foo: 3}, ['abc'])

        console.log(myMap1)
        console.log(...myMap1)
        console.log([...myMap1])        // (2) [Array(2), Array(2)]  // [ [true, 7], [ { foo: 3 },  [ "abc" ] ] ] 




        // 数组转为 Map 

        // 将数组传入 Map 构造函数就可以转为 Map

        const m4 = new Map([
            [true, 7],
            [{foo: 3}, ['abc']]
        ])
        console.log(m4)                // Map(2) {true => 7, {…} => Array(1)}




        // Map 转为对象

        // 如果 Map 的所有键都是字符串,则可以转为对象

        function strMapToObj (strMap) {
            let obj = Object.create(null)
            for (let [k, v] of strMap) {
                obj[k] = v
            }
            return obj
        }

        const myMap2 = new Map()
        .set('yes', true)
        .set('no', false)
        strMapToObj (myMap2)




        // 对象转为 Map 

        function objToStrMap (obj) {
            let strMap = new Map()
            for (let k of Object.keys(obj)) {
                strMap.set(k, obj[k])
            }
            return strMap
        }

        objToStrMap({yes: true, no: false})




        // Map 转为 JSON

        // Map 转为 JSON 要区分两种情况.一种情况是,Map 的键名都是字符串,这时可以选择转为对象 JSON

        function strMapToJson(strMap) {
            return JSON.stringify(strMapToObj(strMap))
        }

        let myMap3 = new Map().set('yes', true).set('no', false)

        strMapToJson(myMap3)


        // 另一种情况是,Map 的键名有非字符串,这时可以选择转为数组 JSON

        function mapToArrayJson(map) {
            return JSON.stringify([...map])
        }

        let myMap4 = new Map().set(true, 7).set({foo: 3}, ['abc'])

        mapToArrayJson(myMap4)




        // JSON 转为 Map

        // JSON 转为 Map,正常情况下所有键名都是字符串

        function jsonToStrMap(jsonStr) {
            return objToStrMap(JSON.parse(jsonStr))
        }

        jsonToStrMap('{"yes": true, "no": false}')




        // 但是有一种特殊情况:整个 JSON 就是一个数组,且每个数组成员本身又是一个具有两个成员的数组.这时,它可以一一对应地转化为 Map ,这往往是数组转为 JSON 的逆操作.

        function jsonToMap(jsonStr) {
            return new Map(JSON.parse(jsonStr))
        }

        jsonToMap('[[true, 7], [{"foo": 3}, ["abc"]]]')

        

Stkcd [股票代码] ShortName [股票简称] Accper [统计截止日期] Typrep [报表类型编码] Indcd [行业代码] Indnme [行业名称] Source [公告来源] F060101B [净利润现金净含量] F060101C [净利润现金净含量TTM] F060201B [营业收入现金含量] F060201C [营业收入现金含量TTM] F060301B [营业收入现金净含量] F060301C [营业收入现金净含量TTM] F060401B [营业利润现金净含量] F060401C [营业利润现金净含量TTM] F060901B [筹资活动债权人现金净流量] F060901C [筹资活动债权人现金净流量TTM] F061001B [筹资活动股东现金净流量] F061001C [筹资活动股东现金净流量TTM] F061201B [折旧摊销] F061201C [折旧摊销TTM] F061301B [公司现金流1] F061302B [公司现金流2] F061301C [公司现金流TTM1] F061302C [公司现金流TTM2] F061401B [股权现金流1] F061402B [股权现金流2] F061401C [股权现金流TTM1] F061402C [股权现金流TTM2] F061501B [公司自由现金流(原有)] F061601B [股权自由现金流(原有)] F061701B [全部现金回收率] F061801B [营运指数] F061901B [资本支出与折旧摊销比] F062001B [现金适合比率] F062101B [现金再投资比率] F062201B [现金满足投资比率] F062301B [股权自由现金流] F062401B [企业自由现金流] Indcd1 [行业代码1] Indnme1 [行业名称1] 季度数据,所有沪深北上市公司的 分别包含excel、dta数据文件格式及其说明,便于不同软件工具对数据的分析应用 数据来源:基于上市公司年报及公告数据整理,或相关证券交易所、各部委、省、市数据 数据范围:基于沪深北证上市公司 A股(主板、中小企业板、创业板、科创板等)数据整理计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值