Map与数组,对象,JOSN的互相转换

(1)Map 转为数组

    const map = new Map([
        ['name','张三'],
        [1,'one'],
        [2,'two'],
        [3,'three'],
    ]);
    console.log(map);//{'name' => '张三', 1 => 'one', 2 => 'two', 3 => 'three'}
    let map0 = [...map.keys()];
    console.log(map0);  //['name', 1, 2, 3]
    let map1 = [...map.values()];
    console.log(map1);  //['张三', 'one', 'two', 'three']
    let map2 = [...map.entries()];
    console.log(map2);  //[Array(2), Array(2), Array(2), Array(2)]
                        //0: (2) ['name', '张三']
                        //1: (2) [1, 'one']
                        //2: (2) [2, 'two']
                        //3: (2) [3, 'three']
                        // length: 4

(2)数组 转为 Map

    let str = [[1,'one'],[2,'two'],[3,'three'],];
    let str0 = new Map(str);
    console.log(str0);  // {1 => 'one', 2 => 'two', 3 => 'three'}

(3)Map 转为对象

    function strMapToObj(strMap){
        let obj = Object.create(null);
        for(let [k,v] of strMap){
            obj[k] = v;
        }
        return obj ;
    }
    const myMap =new Map([
        ['name','张三'],
        ['address','china'],
    ]);
    console.log(strMapToObj(myMap)); //{name: '张三', address: 'china'}

(4)对象转为 Map

//  转换过程:obj ==>数组==>map (对象转为 Map 可以通过`Object.entries()`。    Object.keys() //返回对象的键名    Object.entries() //以数组形式返回对象的键值对)
    let objToMap = {
        'a':1,
        'b':2,
        'name':'张三丰'
    }
    let ToArry = Object.entries(objToMap);//(转成数组) 
    let ToMap = new Map(ToArry);          //(转成map)
    console.log(ToMap);  //{'a' => 1, 'b' => 2, 'name' => '张三丰'}
    
    // 此外,也可以自己实现一个转换函数。
    function objToStrMap(obj){
        let strMap = new Map();
        for(let k of Object.keys(obj)){
            strMap.set(k,obj[k]);
        }
        return strMap ;
    }
    let objStr = {
        'name':'李斯思',
        'age':18
    }
    console.log(objToStrMap(objStr)); //{'name' => '李斯思', 'age' => 18}

(5)Map 转为 JSON

//  转换过程:map==>obj==>json
    function strTOJosn(strMap){
        let obj = Object.create(null);
        for(let [k,v] of strMap){
            obj[k] = v ;
        }
        return obj ;
    }
    function strTOJosn0(strMap){
        // JSON.stringify: 对象转字符串
        return JSON.stringify(strTOJosn(strMap));
    }
    let strMap0 = new Map().set('yes',true).set('no',false);
    console.log(strTOJosn0(strMap0)); //{"yes":true,"no":false}

(6)JSON 转为 Map

//  转换过程:json==>obj===>map  (JSON 转为 Map,正常情况下,所有键名都是字符串。)
    function objToMap1(obj){
        let strMap = new Map();
        for(let k of Object.keys(obj)){
            strMap.set(k,obj[k]);
        }
        return strMap ;
    }
    function josnToMap(josnStr){
        // JSON.parse:字符串转对象
        return objToMap1(JSON.parse(josnStr));
    }
    let josnStr = '{"哈哈": true, "伤心": false}';
    
    console.log(objToMap1(josnStr)); //{'0' => '{', '1' => '"', '2' => '哈', '3' => '哈', '4' => '"', …}
    console.log(josnToMap(josnStr)); //{'哈哈' => true, '伤心' => false}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值