Object.fromEntries
(ES10)使用新的Object.fromEntries
方法的本地和不可變解決方案:
const newObj = Object.fromEntries( Object.entries(obj).map(([k, v]) => [k.toLowerCase(), v]) );
在該函數(shù)廣泛可用之前,您可以使用以下polyfill自訂定義:
Object.fromEntries = arr => Object.assign({}, ...Array.from(arr, ([k, v]) => ({[k]: v}) ));
一個(gè)好處是,此方法與Object.entries
相反,因此現(xiàn)在您可以在物件和陣列表示之間來回切換。
我想到的最快的方法是建立一個(gè)新物件:
var key, keys = Object.keys(obj); var n = keys.length; var newobj={} while (n--) { key = keys[n]; newobj[key.toLowerCase()] = obj[key]; }
我對v8的目前內(nèi)部工作機(jī)制不夠熟悉,無法給出明確的答案。幾年前,我看過一個(gè)視頻,開發(fā)人員在其中討論了對象,如果我沒記錯(cuò)的話,它只會(huì)刪除引用,並讓垃圾收集器處理。但那是幾年前的事了,所以即使當(dāng)時(shí)是這樣,現(xiàn)在也不一定是這樣。
它會(huì)在以後給你帶來麻煩嗎?這取決於你在做什麼,但可能不會(huì)。創(chuàng)建短暫物件是非常常見的,所以程式碼被最佳化來處理它。但每個(gè)環(huán)境都有其限制,也許它會(huì)給你帶來麻煩。你必須使用實(shí)際數(shù)據(jù)進(jìn)行測試。