js数组对象的转换

94 阅读1分钟

数组 -> 对象

  1. forEach
const arr = [1,2,3,4,5];
let obj = {};
arr.forEach((item,index) => {
    obj[index] = item;
})
 
obj  //{ 0: 1, 1: 2, 2: 3, 3: 4, 4: 5 }
  1. Object.fromEntries
const arr = [1,2,3,4,5];
let obj = {};
obj = Object.fromEntries(arr.map((item,index) => [index, item]));
 
obj  //{ 0: 1, 1: 2, 2: 3, 3: 4, 4: 5 }
  1. reduce
const arr = [1,2,3,4,5];
arr.reduce((accu, cur, index) => (accu[index] = cur, accu), {});
// 或
arr.reduce((accu, cur, index) => ({ ...accu, [index]: cur }), {});
// 或
arr.reduce((accu, cur, index) => Object.assign(accu, { [index]: cur }), {});
 
obj  //{ 0: 1, 1: 2, 2: 3, 3: 4, 4: 5 }
  1. Object.assign
const arr = [1,2,3,4,5];
Object.assign({}, arr);
//{ 0: 1, 1: 2, 2: 3, 3: 4, 4: 5 }
// 或
Object.assign({}, ...arr.map((item, index) => ({ [index]: item })));
//{ 0: 1, 1: 2, 2: 3, 3: 4, 4: 5 }
  1. 展开运算符...
const arr = [1,2,3,4,5];
obj = {...arr};
 
obj  //{ 0: 1, 1: 2, 2: 3, 3: 4, 4: 5 }

对象 -> 数组

  1. Array.from
let obj = {0112233445, length: 5};
Array.from(obj)   // [1,2,3,4,5]

// 可用于重复数组元素, 用于测试
Array.from({ length: 5 }).map((v, k) => ({a:k+1}))  // [{a: 1}, {a: 2}, {a: 3}, {a: 4}, {a: 5}]
  1. Object.entries

仅包含对象自身可枚举属性的键值对列表

let obj = {0112233445};
Object.entries(obj).map(([,val]) => val)    // [1,2,3,4,5]
  1. reduce
const obj = { John: 111, Mary: 222 };
Object.entries(obj).reduce((accu, [name, value]) => [...accu, { name, value }], []);
// [{name: 'John', value: 111}, {name: 'Mary', value: 222}];