数组 -> 对象
- 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 }
- 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 }
- 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 }
- 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 }
- 展开运算符...
const arr = [1,2,3,4,5];
obj = {...arr};
obj //{ 0: 1, 1: 2, 2: 3, 3: 4, 4: 5 }
对象 -> 数组
- Array.from
let obj = {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 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}]
- Object.entries
仅包含对象自身可枚举属性的键值对列表
let obj = {0: 1, 1: 2, 2: 3, 3: 4, 4: 5};
Object.entries(obj).map(([,val]) => val) // [1,2,3,4,5]
- 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}];