1. ホーム
  2. javascript

[解決済み] あるオブジェクトのキーをすべて小文字にする最も良い方法(最も効率的な方法)は何ですか?

2023-06-17 11:45:56

質問

私は

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()) { // might already be in its lower case version
        obj[key.toLowerCase()] = obj[key] // swap the value to a new lower case key
        delete obj[key] // delete the old key
    }
  }
  return (obj);
}

例えば、他のキーは本当に削除されるのか、それとも参照だけが削除され、ガベージコレクタに後で噛まれるのか?

また、私は これらのテスト を作成しましたので、そこにあなたの回答を追加して、どのように一致するかを確認できればと思います。

EDIT 1: どうやら、テストによると、キーがすでに小文字かどうかをチェックしない方が速いようですが、速くなったからといって、これを無視して新しい小文字のキーを作るだけで、もっと混乱が生じるのでしょうか?ガベージコレクタはこれに満足するでしょうか?

どのように解決するのですか?

この 最速 思いつくのは、新しいオブジェクトを作成した場合です。

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

私はv8の現在の内部動作に十分精通していないので、明確な答えは出せません。数年前、開発者がオブジェクトについて話しているビデオを見たことがあります。 参照だけを削除して、ガベージコレクタに処理を任せるというものでした。しかし、それは何年も前のことなので、当時はそうであっても、今はそうである必要はありません。

後で噛みつかれるのでしょうか?それはあなたがやっていることによりますが、おそらくないでしょう。短命のオブジェクトを作成することは非常に一般的なので、コードはそれを処理するように最適化されています。しかし、すべての環境には制限があり、もしかしたら噛み付くかもしれません。実際のデータでテストする必要があります。