JavaScript中的Object.entries()和Object.fromEntries()示例詳解
Object.entries()
1. 基本知識(shí)
用于將對(duì)象的可枚舉屬性轉(zhuǎn)換為一個(gè)數(shù)組
該數(shù)組包含對(duì)象自身的可枚舉屬性的鍵值對(duì)數(shù)組,每個(gè)鍵值對(duì)數(shù)組由兩個(gè)元素組成:
- 第一個(gè)元素是屬性名,
字符串(或符號(hào)) - 第二個(gè)元素是屬性值,
任何類型
對(duì)象的屬性默認(rèn)是可枚舉的,意味著它們可以在 for...in 循環(huán)中被枚舉出來
使用 Object.defineProperty 方法可以設(shè)置或修改屬性的可枚舉性
基本的用法如下:
- 基本用法:
const obj = { a: 1, b: 2, c: 3 };
const entries = Object.entries(obj);
console.log(entries);
// 輸出: [['a', 1], ['b', 2], ['c', 3]]
- 處理空對(duì)象:
const emptyObj = {};
const entries = Object.entries(emptyObj);
console.log(entries);
// 輸出: []
- 與其他方法的比較:
Object.keys(obj): 返回一個(gè)包含對(duì)象所有可枚舉屬性名的數(shù)組Object.values(obj):返回一個(gè)包含對(duì)象所有可枚舉屬性值的數(shù)組Object.entries(obj): 返回一個(gè)包含對(duì)象所有可枚舉屬性的鍵值對(duì)數(shù)組
const obj = { a: 1, b: 2, c: 3 };
console.log(Object.keys(obj));
// 輸出: ['a', 'b', 'c']
console.log(Object.values(obj));
// 輸出: [1, 2, 3]
console.log(Object.entries(obj));
// 輸出: [['a', 1], ['b', 2], ['c', 3]]
- 非對(duì)象參數(shù):
如果傳入非對(duì)象參數(shù)(如 null 或 undefined),Object.entries會(huì)拋出錯(cuò)誤
try {
console.log(Object.entries(null));
} catch (e) {
console.error(e);
// 輸出: TypeError: Cannot convert undefined or null to object
}
- 使用 for…of 迭代:
Object.entries返回的數(shù)組可以使用for...of迭代
const obj = { x: 10, y: 20, z: 30 };
for (const [key, value] of Object.entries(obj)) {
console.log(`${key}: ${value}`);
}
// 輸出:
// x: 10
// y: 20
// z: 30
2. Demo
示例 1:過濾對(duì)象的屬性
通過 Object.entries 結(jié)合 filter 方法,篩選出滿足特定條件的鍵值對(duì)
const obj = { a: 1, b: 2, c: 3, d: 4 };
const filteredEntries = Object.entries(obj).filter(([key, value]) => value > 2);
console.log(filteredEntries);
// 輸出: [['c', 3], ['d', 4]]
示例 2: 對(duì)象屬性值的轉(zhuǎn)換
使用 map 方法對(duì)對(duì)象屬性值進(jìn)行轉(zhuǎn)換,然后重新構(gòu)建對(duì)象
const obj = { name: 'Alice', age: 25 };
const transformedEntries = Object.entries(obj).map(([key, value]) => {
return [key, typeof value === 'string' ? value.toUpperCase() : value];
});
const newObj = Object.fromEntries(transformedEntries);
console.log(newObj);
// 輸出: { name: 'ALICE', age: 25 }
示例 3:嵌套對(duì)象處理
const nestedObj = {
user: {
name: 'Bob',
age: 30
},
location: {
city: 'New York',
country: 'USA'
}
};
const nestedEntries = Object.entries(nestedObj).flatMap(([key, value]) =>
Object.entries(value).map(([subKey, subValue]) => [`${key}.${subKey}`, subValue])
);
console.log(nestedEntries);
// 輸出: [['user.name', 'Bob'], ['user.age', 30], ['location.city', 'New York'], ['location.country', 'USA']]
示例 4:動(dòng)態(tài)構(gòu)建對(duì)象
const entries = [['a', 1], ['b', 2], ['c', 3]];
const obj = Object.fromEntries(entries);
console.log(obj);
// 輸出: { a: 1, b: 2, c: 3 }
示例 5:結(jié)合其他方法進(jìn)行數(shù)據(jù)處理
使用 reduce 方法結(jié)合 Object.entries 對(duì)對(duì)象進(jìn)行復(fù)雜的數(shù)據(jù)處理
const obj = { apple: 10, banana: 20, cherry: 30 };
const total = Object.entries(obj).reduce((sum, [key, value]) => sum + value, 0);
console.log(total);
// 輸出: 60
示例 6:轉(zhuǎn)換對(duì)象為查詢字符串
const params = { name: 'Alice', age: 25, city: 'Wonderland' };
const queryString = Object.entries(params)
.map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
.join('&');
console.log(queryString);
// 輸出: 'name=Alice&age=25&city=Wonderland'
Object.fromEntries()
一、輕松將鍵值對(duì)數(shù)組轉(zhuǎn)為對(duì)象,后端數(shù)據(jù)處理神器
當(dāng)從后端接口拿到的數(shù)據(jù)是
[['key1', 'value1'], ['key2', 'value2']]這種鍵值對(duì)數(shù)組格式時(shí),想把它轉(zhuǎn)為對(duì)象方便使用,傳統(tǒng)方法可能需要寫一堆循環(huán)代碼。Object.fromEntries()方法完美解決這個(gè)痛點(diǎn),它是ES10的新特性,在前后端數(shù)據(jù)交互中堪稱“瑞士軍刀”。
// 假設(shè)后端返回的用戶信息是鍵值對(duì)數(shù)組
const userArray = [
['name', 'Tom'],
['age', 28],
['email', 'tom@example.com']
];
// 使用Object.fromEntries()將鍵值對(duì)數(shù)組轉(zhuǎn)為對(duì)象
const userObject = Object.fromEntries(userArray);
console.log(userObject);
// {name: 'Tom', age: 28, email: 'tom@example.com'}
在處理登錄接口返回?cái)?shù)據(jù)、表單提交數(shù)據(jù)解析等場(chǎng)景時(shí),這個(gè)方法能讓你少寫幾十行代碼,開發(fā)效率直接起飛!
總結(jié)
到此這篇關(guān)于JavaScript中的Object.entries()和Object.fromEntries()示例詳解的文章就介紹到這了,更多相關(guān)Js中Object.entries() 和Object.fromEntries()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
小程序中實(shí)現(xiàn)獲取全部數(shù)據(jù)的圖文教程
最近在開發(fā)中遇到了一個(gè)需求,需要獲取小程序的全部數(shù)據(jù),所以這篇文章主要給大家介紹了關(guān)于小程序中實(shí)現(xiàn)獲取全部數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2022-11-11
使用JS實(shí)現(xiàn)側(cè)邊欄展開和關(guān)閉動(dòng)畫效果
在很多電商的pc端網(wǎng)頁,我們往往能看到那個(gè)再熟悉不過的側(cè)邊欄,當(dāng)我們鼠標(biāo)放上去時(shí),它就會(huì)絲滑的彈出一個(gè)內(nèi)容的盒子,當(dāng)你離開,這個(gè)盒子又像彈簧一樣收縮回去本文我們就要用JS做出這個(gè)簡(jiǎn)單的動(dòng)畫效果,需要的朋友可以參考下2026-01-01
JS實(shí)現(xiàn)單張或多張圖片持續(xù)無縫滾動(dòng)的示例代碼
這篇文章主要介紹了JS實(shí)現(xiàn)單張或多張圖片持續(xù)無縫滾動(dòng)效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
JavaScript與jQuery實(shí)現(xiàn)的閃爍輸入效果
這篇文章主要介紹了JavaScript與jQuery實(shí)現(xiàn)的閃爍輸入效果,結(jié)合實(shí)例形式分別分析了JavaScript與jQuery實(shí)現(xiàn)閃爍輸入效果的方法與具體使用技巧,需要的朋友可以參考下2016-02-02
js將鍵值對(duì)字符串轉(zhuǎn)為json字符串的方法
下面小編就為大家分享一篇js將鍵值對(duì)字符串轉(zhuǎn)為json字符串的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03
詳解JavaScript對(duì)Date對(duì)象的操作問題(生成一個(gè)倒數(shù)7天的數(shù)組)
最近項(xiàng)目需求要生成一個(gè)倒數(shù)7天的數(shù)組,下面小編把我的實(shí)現(xiàn)思路和代碼整理分享給大家,供大家參考,需要的朋友可以參考下2015-10-10

