JavaScript で知らない Object.entries の使い方

JavaScript で知らない Object.entries の使い方

序文

通常、Object クラスでは Object.keys、Object.values、Object.assign などの静的メソッドをよく使用しますが、Object.entries メソッドを使用することはほとんどありません。この記事では、Object.entries メソッドに関する 2 つのヒントを説明します。

効果

Object.entries() メソッドは、指定されたオブジェクトの列挙可能なプロパティのキーと値のペアの配列を、for…in ループによって返されるのと同じ順序で返します (違いは、for-in ループはプロトタイプ チェーン内のプロパティも列挙することです)。


const obj = { foo: 'bar', baz: 42 };
console.log(Object.entries(obj)); // [ ['foo', 'bar'], ['baz', 42] ]

// 配列のようなオブジェクト
定数obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.entries(obj)); // [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]

// ランダムなキー順序を持つ配列のようなオブジェクト
定数 anObj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.entries(anObj)); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]

// getFoo は列挙できないプロパティです
const myObj = Object.create({}, { getFoo: { value() { return this.foo; } } });
myObj.foo = 'bar';
console.log(Object.entries(myObj)); // [ ['foo', 'bar'] ]

// 非オブジェクト引数はオブジェクトに強制変換されます
console.log(Object.entries('foo')); // [ ['0', 'f'], ['1', 'o'], ['2', 'o'] ]

// キーと値をうまく反復処理する
定数obj = { a: 5, b: 7, c: 9 };
Object.entries(obj) の (const [キー、値]) {
  console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
}

// または、配列の追加機能を使用する
Object.entries(obj).forEach(([キー, 値]) => {
console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"

1. 共通オブジェクトを反復処理するには for...of を使用します

フロントエンドの初心者の多くは、次のようなコードを書いたことがあるかもしれません。

obj = {
  a: 1、
  2 倍
}

for (let objの値) {
  // ...
}

しかし、実行すると、エラーが報告されることがわかります。

キャッチされない TypeError: obj は反復可能ではありません

したがって、通常のオブジェクトのトラバースは、トラバースの均一化になります。ただし、 for...in はオブジェクト自身のプロパティを走査するだけでなく、オブジェクトのプロトタイプも走査するため、使用時にフィルターを追加する必要もあります。次に例を示します。

for (let key in obj) {
  Object.prototype.hasOwnProperty.call(obj, key) の場合 {
    // ...
  }
}

これはあまりエレガントではないことがわかります。通常のオブジェクトを for...of を使用して走査できない理由は、通常のオブジェクトがイテレータ インターフェースを実装していないためです (JS イテレータについては特別な記事を書く予定です)。 JS 配列はイテレータ インターフェイスを実装しているため、Object.entries を通じて取得されたキーと値の配列は for...of を使用して走査できます。

Object.entries(obj) の (let [キー, 値]) {
  // ...
}

Object.entries は、プロトタイプのプロパティを除く、オブジェクト自身の列挙可能なプロパティのキーと値のペアの配列を返します。

2. 通常のオブジェクトとMapオブジェクト間の変換

プロジェクトでは、通常のオブジェクトを Map オブジェクトに変換し、トラバーサルで引き続き使用していることがわかりました。

obj = {
  a: 1、
  2 倍
}

map = new Map();

for (let key in obj) {
  Object.prototype.hasOwnProperty.call(obj, key) の場合 {
    map.set(キー、obj[key]);
  }
}

実際、Map コンストラクターは初期化のためにキーと値のペアの配列を受け入れることができるため、Object.entries を使用して通常のオブジェクトを Map オブジェクトに変換できます。

map = new Map(Object.entries(obj)); を作成します。

では、Map オブジェクトを通常のオブジェクトに戻すにはどうすればよいでしょうか?まだトラバーサルを使用していますか?いいえ、Object.fromEntries 静的メソッドを使用して変換できます。

obj = Object.fromEntries(map); とします。

この時点では、通常のオブジェクト、キーと値のペアの配列、および Map オブジェクト間の変換関係をまだ理解していない方も多いかもしれません。図でまとめます。

Object.entriesとObject.fromEntriesは2つの反対の操作です

要約する

皆さんが知らないJavaScriptのObject.entriesの使い方についての記事はこれで終わりです。より関連性の高いjsのObject.entriesの使い方については、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

参照する

  • Object.entries() - MDN ドキュメント
  • Map() コンストラクター - MDN ドキュメント
以下もご興味があるかもしれません:
  • js 配列 fill() 充填メソッド
  • js配列forEachインスタンスの詳細な使用方法
  • JavaScript配列の重複排除のいくつかの方法についての詳細な説明
  • 任意の長さの配列を作成または埋めるための JS のヒントの要約
  • JavaScript 配列と非配列オブジェクトのディープ クローンとシャロー クローンの原則の詳細な説明
  • JavaScript配列重複排除の詳細な説明
  • js 配列エントリ() 反復メソッドを取得する

<<:  html2canvasで画像が正常にキャプチャできない時の解決方法

>>:  docker実行時に異なるポートを占有する2つのポートを起動する問題を解決する

推薦する

Apache をインストールした後、サービスを開始できません (サービスを開始するとエラー コード 1 が表示されます)

目次1. エラーメッセージ2. エラーの原因3. 解決策1. エラーメッセージ1. インストール後、...

MySQLのダウンロードとインストールのプロセスの詳細な説明

1: MySqlをダウンロードする公式サイトのダウンロードアドレス: https://dev.mys...

MySQLの論理アーキテクチャに関する深い理解

MySQL は現在、ほとんどの企業や事業体で使用されているデータベースです。MySQL が使用される...

iframeをカプセル化するvueコンポーネントを開発する

目次1. コンポーネントの紹介2. コンポーネントの内部構造とロジック1. コード組織構造2. マッ...

Hタグはウェブページ制作において適切に使用すべきである

HTML タグには、ページのタイトルを処理するための特別なタグがあります。これらは h1、h2、h3...

Dockerの急速な拡張の高度な方法

1. コマンド方式作成された Swarm クラスターで nginx サービスを実行し、--repli...

MySQL の文字セットの不一致によって発生する異常な接続テーブルの解決方法

目次1. 解決策2. MySQLの文字セット文字セット検証ルール次のように簡単なテーブルクエリを実行...

W3C チュートリアル (10): W3C XQuery アクティビティ

XQuery は、XML ドキュメントからデータを抽出するための言語です。 XQuery は、XML...

ViteでReactプロジェクトを構築する方法

目次序文Viteプロジェクトを作成する改修プロジェクトディレクトリの規則その他の構成序文毎日鳩、火ば...

支払いカウントダウンを実現し、ホームページに戻るためのjs

ホーム ページに戻るための支払いカウントダウン ケースの概要: シンプルな js 構文、getEle...

ElementUIはドロップダウンオプションと複数選択ボックスのサンプルコードを実装します

目次ドロップダウン複数選択ボックスアップグレード - すべてのオプションを追加改訂と改善を求める製品...

nginx rewriteを使用してURLをリダイレクトする方法

最近仕事でnginxの設定を変更する必要が頻繁にあり、nginxでrewriteを使用する方法を学び...

Dockerは1行のコマンドでFTPサービス構築の実装を完了します

1行のコマンド docker run -d \ -v /share:/home/vsftpd \ -...

Windows 10 での MySQL 8.0.22 のインストールと設定方法のグラフィック チュートリアル

MySQL 8.0.22のインストールと設定方法のグラフィックチュートリアル、参考までに、具体的な内...

Zabbix で監視項目と集約されたグラフを設定するためのサンプルコード

1. ローカルマシンを監視するためにZabbixエージェントをインストールするエージェントソフトウェ...