js对象与数组的互转
文章目录
- js对象与数组的互转
- 一、数组转对象
- 1.使用forEach,for in,es6展开运算符,assign
- 2. 使用 `Object.fromEntries()`
- 3. 将数组转为键值对对象
- 4. 使用 `reduce()`
- 4. 数组元素为对象时提取属性
- 二、对象转数组
- 1. 提取键/值/键值对
- 2. 转换为特定结构的数组
- 三、注意事项
一、数组转对象
1.使用forEach,for in,es6展开运算符,assign
let arr = [{ id: 1, name: '张三' },{ id: 2, name: '李四' }]
let obj = {}
//1.forEach
arr.forEach(item => obj[item.value] = item.name)
console.dir(obj)//{1: "张三",2: "李四"}// 2.使用for in 遍历
for(let key in arr) { //这里key索引obj[key] = arr[key]
}// 3.使用es6展开运算符
var arr = [1,2,3,4,5,6]
let obj = {}
let obj = {...arr}// 4. assign
var arr = [1,2,3,4,5,6]
let obj = {}
obj = (Object.assign({}, array)
console.log(obj);// {1,2,3,4,5,6}
2. 使用 Object.fromEntries()
适用于将键值对数组转换为对象(ES2019+):
const arr = [['name', 'Alice'], ['age', 25]];
const obj = Object.fromEntries(arr);
// 结果:{ name: 'Alice', age: 25 }
3. 将数组转为键值对对象
场景:将数组的索引作为键,元素作为值(例如 [A, B, C]
→ {0: A, 1: B, 2: C}
)。
const arr = ["a", "b", "c"];
const obj = Object.assign({}, arr);
// 结果:{0: 'a', 1: 'b', 2: 'c'}
4. 使用 reduce()
将普通数组或复杂结构转换为对象:
// 数组元素为对象,按 id 合并
const arr = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}];
const obj = arr.reduce((acc, curr) => {acc[curr.id] = curr;return acc;
}, {});
// 结果:{1: {id:1,name:'Alice'}, 2: {id:2,name:'Bob'}}
4. 数组元素为对象时提取属性
场景:将数组中的对象提取特定属性,合并成新对象。
const users = [{ id: 1, name: "Alice" },{ id: 2, name: "Bob" }
];
const obj = Object.fromEntries(users.map(user => [user.id, user.name]));
// 结果:{1: 'Alice', 2: 'Bob'}
二、对象转数组
1. 提取键/值/键值对
const obj = { a: 1, b: 2, c: 3 };// 键数组
const keys = Object.keys(obj); // ['a', 'b', 'c']// 值数组
const values = Object.values(obj); // [1, 2, 3]// 键值对数组
const entries = Object.entries(obj); // [['a',1], ['b',2], ['c',3]]
2. 转换为特定结构的数组
使用 Object.entries()
+ map()
转换数据格式:
const obj = { a: 1, b: 2 };
const arr = Object.entries(obj).map(([key, value]) => ({ [key]: value }));
// 结果:[{a:1}, {b:2}]
三、注意事项
- 键名冲突:
Object.fromEntries()
会覆盖重复键名的值。 - 兼容性:
Object.fromEntries()
在 IE 中不支持,需通过 polyfill 或手动实现。 - 稀疏数组:对象转数组时,稀疏数组的
undefined
值会被忽略。