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
值會被忽略。