小技巧系列 -- 对象、数组、Map、JSON之间的相互转换

5,428 阅读1分钟

ES5 中 对象 与数组,JSON 之间的相互转换

  • 对象转换为数组
// 取 keys
const obj1 = {
    name1: undefined,
    name2: undefined,
    name3: undefined,
}
const arr1 = Object.keys(obj)
// 取 values
const obj2 = {
    name1: 'aaa',
    name2: 'bbb',
    name3: 'ccc',
}
const arr2 = Object.values(obj)
console.log(arr)
// 都取
const obj3 = {
    name1: 'aaa',
    name2: 'bbb',
    name3: 'ccc',
}
const arr3 = Object.keys(obj)
console.log(arr)
  • 数组转换为对象
// 索引为 key 值,数组元素为 value 值
const arr1 = ['name1','name2','name3']
const obj1 = {...arr1} // { '0': 'name1', '1': 'name2', '2': 'name3' }
// 数组元素为 key 值,value 值为 undefined
const arr2 = ['name1','name2','name3']
const obj2 = {}
arr2.forEach((item)=>{ obj2[item] = undefined })
console.log(obj2)// { name1: undefined, name2: undefined, name3: undefined }

ES6 中 Map 与对象、数组,JSON 之间的相互转换

以下内容来自 原文

  • Map转为数组
// 保留 key、value,转换成二元数组
const map = new Map();
map.set(1,"foo").set(2,"bar").set(3,"baz");
const arr = [...map]; // 法一:[ [ 1, 'foo' ], [ 2, 'bar' ], [ 3, 'baz' ] ]
const arr = Array.from(map); // 法二:[ [ 1, 'foo' ], [ 2, 'bar' ], [ 3, 'baz' ] ]
  • 数组 转为 Map
const arr = ["foo","bar","baz"];
// key 值是索引、value 值是元素
const map1 = new Map(arr.map( (value,key) => [key,value]));
// Map(3) { 0 => 'foo', 1 => 'bar', 2 => 'baz' }

// key 值是元素,value 值是 undefined
const map2 = new Map(arr.map((value) => [value,undefined]));
// Map(3) { 'foo' => undefined, 'bar' => undefined, 'baz' => undefined }
  • Map 转为对象
const map = new Map();
map.set(1,"foo").set(2,"bar").set(3,"baz");
const mapToObj = (map) => {
    let obj = {};
    for(let [k,v] of map) {
        obj[k] = v;
    }
    return obj;
}
console.log(mapToObj(map));
  • 对象转为 Map
const obj = {
    "1" : "foo",
    "2": "bar",
    "3" : "baz",
}
const objToMap = (obj) => {
    let map = new Map();
    for(let key in obj) {
        map.set(key,obj[key]);
    }
    return map;
}
console.log(objToMap(obj));
  • Map 转为 JSON(借助 Map 转 JSON)
const map = new Map();
map.set(1,"foo").set(2,"bar").set(3,"baz");
const mapToJson = (map) => JSON.stringify(mapToObj(map));
console.log(mapToJson(map));
  • JSON 转为 Map(借助对象转 Map)
let json = '{"1":"foo","2":"bar","3":"baz"}';
const jsonToMap = (json) => objToMap(JSON.parse(json));
console.log(jsonToMap(json));