国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

最有效的方式是將一個(gè)物件的所有鍵轉(zhuǎn)換為小寫字母的方法是什麼?
P粉066224086
P粉066224086 2023-08-22 12:42:40
0
2
679
<p>我想出了以下解</p> <pre class="brush:php;toolbar:false;">function keysToLowerCase (obj) { var keys = Object.keys(obj); var n = keys.length; while (n--) { var key = keys[n]; // "cache" it, for less lookups to the array if (key !== key.toLowerCase()) { // 可能已經(jīng)是小寫形式 obj[key.toLowerCase()] = obj[key] // 將值交換到新的小寫鍵 delete obj[key] // 刪除舊鍵 } } return (obj); }</pre> <p>但是我不確定v8會(huì)如何處理,例如,它是否真的會(huì)刪除其他鍵,還是只會(huì)刪除引用,然後垃圾回收器會(huì)在後面咬我? </p> <p>此外,我創(chuàng)建了這些測試,希望您能在那裡添加您的答案,以便我們可以看到它們的匹配情況。 </p> <p><strong>編輯1:</strong> 顯然,根據(jù)測試結(jié)果,如果我們不檢查鍵是否已經(jīng)是小寫形式,速度會(huì)更快,但是除了速度更快之外,它會(huì)透過忽略這一點(diǎn)而創(chuàng)造更多的混亂嗎?垃圾回收器會(huì)對此滿意嗎? </p>
P粉066224086
P粉066224086

全部回覆(2)
P粉792026467

使用 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)在您可以在物件和陣列表示之間來回切換。

P粉258788831

我想到的最快的方法是建立一個(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)行測試。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板