検索

ホームページ  >  に質問  >  本文

オブジェクトのすべてのキーを小文字に変換する最も効率的な方法は何ですか?

<p>私は次の解決策を思いつきました</p> <pre class="brush:php;toolbar:false;">function keyToLowerCase (obj) { var キー = Object.keys(obj); var n = キーの長さ; 一方 (n--) { var key = key[n]; // 配列への検索を少なくするために「キャッシュ」します if (key !== key.toLowerCase()) { // すでに小文字になっている可能性があります obj[key.toLowerCase()] = obj[key] // 値を新しい小文字キーに置き換えます delete obj[key] // 古いキーを削除します } } 戻り値 (obj); }</pre> <p>しかし、v8 がそれをどのように処理するかはわかりません。たとえば、実際に他のキーを削除するのでしょうか、それとも参照を削除するだけで、その後ガベージ コレクターが私を攻撃するのでしょうか? </p> <p>また、これらのテストを作成しました。テストがどのように一致するかを確認できるよう、回答をそこに追加していただければ幸いです。 </p>

これによりさらに混乱が生じますか?ゴミ収集業者はこれで満足するでしょうか? </p>

P粉066224086P粉066224086469日前558

全員に返信(2)返信します

  • P粉792026467

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

    Object.fromEntries の使用 (ES10)

    新しい

    Object.fromEntries メソッドを使用したローカルで不変のソリューション: リーリー

    この関数

    が広く利用可能になるまで は、次の polyfill カスタム定義を使用できます: リーリー

    1 つの利点は、このメソッドが

    Object.entries の逆であるため、オブジェクト表現と配列表現を行き来できることです。

    返事
    0
  • P粉258788831

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

    私が考える最も早い方法は、新しいオブジェクトを作成することです:

    リーリー

    私は、v8 の現在の内部動作について明確な答えを出せるほど詳しくはありません。数年前、開発者がオブジェクトについて説明しているビデオを見ましたが、私の記憶が正しければ、参照を削除してガベージ コレクターに処理させるだけでした。しかし、それは数年前のことなので、当時は真実だったとしても、今は必ずしも真実であるとは限りません。

    後で迷惑がかかりませんか?それはあなたが何をしているかにもよりますが、おそらくそうではありません。一時的なオブジェクトの作成は非常に一般的であるため、コードはそれを処理できるように最適化されています。しかし、どの環境にも制限があり、問題が発生する可能性があります。実際のデータを使用してテストする必要があります。

    返事
    0
  • キャンセル返事