在 JavaScript 中,将数组转换为对象有多种方法,具体取决于数组的结构和转换需求。以下是常见的几种场景及对应的实现方法:
1. 数组元素为键值对(如二维数组)
如果数组的每个元素是 [key, value]
格式的键值对,可以直接用 Object.fromEntries()
转换。
const arr = [['name', 'John'], ['age', 30], ['city', 'New York']];
// 转换为对象
const obj = Object.fromEntries(arr);
console.log(obj);
// { name: "John", age: 30, city: "New York" }
2. 数组索引作为对象的键
将数组的索引转为对象的键,值对应数组元素:
const arr = ['apple', 'banana', 'orange'];
// 方法 1: 使用 reduce
const obj1 = arr.reduce((acc, value, index) => {
acc[index] = value;
return acc;
}, {});
// 方法 2: 直接遍历
const obj2 = {};
arr.forEach((value, index) => {
obj2[index] = value;
});
console.log(obj1); // { 0: "apple", 1: "banana", 2: "orange" }
console.log(obj2); // { 0: "apple", 1: "banana", 2: "orange" }
3. 自定义转换规则
如果数组需要根据特定规则转为对象(如属性名映射),可以用 reduce
灵活处理。
const users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' }
];
// 将数组转为 { id: name } 格式的对象
const userMap = users.reduce((acc, user) => {
acc[user.id] = user.name;
return acc;
}, {});
console.log(userMap);
// { 1: "Alice", 2: "Bob" }
4. 处理特殊结构的数组
如果数组元素是对象,需提取特定字段组合成新对象:
const products = [
{ sku: 'A1', price: 100 },
{ sku: 'B2', price: 200 }
];
// 转为 { sku: price } 格式的对象
const priceMap = products.reduce((acc, product) => {
acc[product.sku] = product.price;
return acc;
}, {});
console.log(priceMap);
// { A1: 100, B2: 200 }
总结
场景 | 推荐方法 |
---|---|
键值对数组([[key, value]] ) | Object.fromEntries() |
索引作为键 | reduce 或 forEach 遍历 |
自定义复杂转换逻辑 | reduce |
注意事项
Object.fromEntries()
的兼容性:ES2019+ 支持,旧环境需 polyfill。- 避免覆盖同名属性:合并时若键名冲突,后面的值会覆盖前面的。
- 深层嵌套数组:如需处理多层结构,可能需要递归或更复杂的逻辑。