Rumah  >  Soal Jawab  >  teks badan

Apakah cara paling berkesan untuk menukar semua kunci objek kepada huruf kecil?

<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粉066224086P粉066224086425 hari yang lalu520

membalas semua(2)saya akan balas

  • P粉792026467

    P粉7920264672023-08-23 10:44:49

    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.

    balas
    0
  • P粉258788831

    P粉2587888312023-08-23 00:25:13

    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.

    balas
    0
  • Batalbalas