<p>Saya datang dengan penyelesaian berikut</p>
<pre class="brush:php;toolbar:false;">function keysToLowerCase (obj) {
var keys = Object.keys(obj);
var n = kekunci.panjang;
manakala (n--) {
var key = keys[n]; // "cache" itu, untuk kurang mencari pada array
if (key !== key.toLowerCase()) { // Mungkin sudah menjadi huruf kecil
obj[key.toLowerCase()] = obj[key] // Tukar nilai kepada kekunci huruf kecil baharu
delete obj[key] // Padam kekunci lama
}
}
kembali (obj);
}</pre>
<p>Tetapi saya tidak pasti bagaimana v8 akan mengendalikannya, sebagai contoh, adakah ia benar-benar memadamkan kekunci lain atau adakah ia hanya memadamkan rujukan dan kemudian pemungut sampah akan menggigit saya di belakang? </p>
<p>Selain itu, saya mencipta ujian ini dan ingin anda menambahkan jawapan anda di sana supaya kita dapat melihat bagaimana ia sepadan. </p>
Adakah ini menimbulkan lebih kekeliruan? Adakah pemungut sampah akan gembira dengan ini? </p>
Gunakan
Object.fromEntries
(ES10)Penyelesaian tempatan dan tidak berubah menggunakan kaedah
Object.fromEntries
baharu:Sehingga fungsi ini tersedia secara meluas, anda boleh menggunakan polyfill takrif tersuai berikut:
Satu faedah ialah kaedah ini adalah bertentangan dengan
Object.entries
, jadi kini anda boleh bertukar-tukar antara perwakilan objek dan tatasusunan.Cara terpantas yang boleh saya fikirkan ialah mencipta objek baharu:
Saya tidak cukup arif dengan kerja dalaman semasa v8 untuk memberikan jawapan yang jelas. Beberapa tahun yang lalu saya melihat video di mana pembangun membincangkan objek dan jika saya ingat dengan betul ia hanya mengalih keluar rujukan dan membenarkan pemungut sampah menanganinya. Tetapi itu adalah beberapa tahun yang lalu, jadi walaupun ia benar dahulu, ia tidak semestinya benar sekarang.
Adakah ia akan menyusahkan anda nanti? Ia bergantung pada apa yang anda lakukan, tetapi mungkin tidak. Mencipta objek fana adalah sangat biasa, jadi kod dioptimumkan untuk mengendalikannya. Tetapi setiap persekitaran mempunyai batasannya dan mungkin ia akan menyebabkan masalah kepada anda. Anda perlu menguji dengan data sebenar.