Apakah cara paling berkesan untuk menukar semua kunci objek kepada huruf kecil?
P粉066224086
P粉066224086 2023-08-22 12:42:40
0
2
577
<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>

P粉066224086
P粉066224086

membalas semua(2)
P粉792026467

Gunakan Object.fromEntries (ES10)

Penyelesaian tempatan dan tidak berubah menggunakan kaedah Object.fromEntries baharu:

const newObj = Object.fromEntries(
  Object.entries(obj).map(([k, v]) => [k.toLowerCase(), v])
);

Sehingga fungsi ini tersedia secara meluas, anda boleh menggunakan polyfill takrif tersuai berikut:

Object.fromEntries = arr => Object.assign({}, ...Array.from(arr, ([k, v]) => ({[k]: v}) ));

Satu faedah ialah kaedah ini adalah bertentangan dengan Object.entries, jadi kini anda boleh bertukar-tukar antara perwakilan objek dan tatasusunan.

P粉258788831

Cara terpantas yang boleh saya fikirkan ialah mencipta objek baharu:

var key, keys = Object.keys(obj);
var n = keys.length;
var newobj={}
while (n--) {
  key = keys[n];
  newobj[key.toLowerCase()] = obj[key];
}

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan