JavaScript でオブジェクトをトラバースする 5 つの方法 サンプルコード

JavaScript でオブジェクトをトラバースする 5 つの方法 サンプルコード

準備する

まずはテストオブジェクトobjを準備しましょう。

コードリスト1

var notEnum = Symbol("継承された列挙不可能なシンボル");
var プロトコル = {
    [Symbol("継承された列挙可能なシンボル")]: "継承された列挙可能なシンボル",
    名前: 「継承された列挙可能なプロパティ」
};
// 列挙できないプロパティ Object.defineProperty(proto, "age", {
    値: "列挙不可能なプロパティを継承する"
});
// 列挙不可能なシンボルプロパティ Object.defineProperty(proto, notEnum, {
    値: "列挙不可能なシンボルを継承する"
});

var obj = {
    job1: "列挙可能な属性 1 を所有する",
    job2: "列挙可能な属性2を所有する",
    [Symbol("自身の列挙可能なシンボル")]: "自身の列挙可能なシンボル"
};
// Object.setPrototypeOf(obj, proto) を継承します。
// 列挙できないプロパティ Object.defineProperty(obj, "address", {
    値: "列挙できない属性を所有する"
});
// 列挙不可能なシンボル属性 var ownNotEnum = Symbol("列挙不可能なシンボルを所有する");
オブジェクト.defineProperty(obj, ownNotEnum, {
    値: "列挙不可能なシンボルを所有する"
});

5つの武器

…のために

これは、オブジェクト トラバーサルの分野ではベテランです。この方法では、オブジェクト自体とその継承のすべての列挙可能なプロパティ (シンボル型を除く) をトラバースできます。

コードリスト2

for(var attr in obj){
    console.log(attr,"==",obj[attr]);
}
/*
job1 == 自身の列挙可能なプロパティ 1
job2 == 列挙可能なプロパティ 2 を所有する
name == 継承された列挙可能なプロパティ */

オブジェクト.キー

オブジェクト自体のすべての列挙可能なプロパティの配列を取得します(シンボル型を除く)

コードリスト3

オブジェクト.keys(obj).map((attr)=>{
    console.log(attr,"==",obj[attr]);
});
/*
job1 == 自身の列挙可能なプロパティ 1
job2 == 列挙可能なプロパティ 2 を所有する
*/

オブジェクト.getOwnPropertyNames

オブジェクト自体のすべての非シンボルプロパティ名(列挙不可能なものを含む)の配列を取得します。

コードリスト4

Object.getOwnPropertyNames(obj).map((attr)=>{
    console.log(attr,"==",obj[attr]);
});
/*
job1 == 自身の列挙可能なプロパティ 1
job2 == 列挙可能なプロパティ 2 を所有する
アドレス == 自身の列挙不可能な属性*/

オブジェクト.getOwnPropertySymbols

オブジェクト自体のSymbol型であるすべての属性名(列挙できないものも含む)の配列を取得します。

コードリスト5

Object.getOwnPropertySymbols(obj).map((attr)=>{
    console.log(attr,"==",obj[attr]);
});
/*
シンボル(自身の列挙可能なシンボル) == 自身の列挙可能なシンボル
シンボル(自身の非列挙シンボル) == 自身の非列挙シンボル
*/

反映する.ownKeys

オブジェクトのすべてのプロパティ名の配列を取得します(列挙できないタイプとシンボルタイプを含む)

リスト6

Reflect.ownKeys(obj).map((attr)=>{
    console.log(attr,"==",obj[attr]);
});
/*
job1 == 自身の列挙可能なプロパティ 1
job2 == 列挙可能なプロパティ 2 を所有する
アドレス == 自身の非列挙属性 シンボル (自身の列挙可能なシンボル) '==' '自身の列挙可能なシンボル'
シンボル (自身の非列挙シンボル) '==' '自身の非列挙シンボル'
*/

要約する

武器庫の指示に従って、必要に応じて適切な武器を選択してください。

API操作する独自の属性列挙できないプロパティ継承されたプロパティシンボルのプロパティ
…のためにトラバーサルはいいいえはいいいえ
オブジェクト.キー属性の配列を返しますはいいいえいいえいいえ
オブジェクト.getOwnPropertyNames非シンボル属性の配列を返しますはいはいいいえいいえ
オブジェクト.getOwnPropertySymbolsシンボル属性配列を返しますはいはいいいえはい
反映する.ownKeys属性の配列を返しますはいはいいいえはい

5 つの武器の中で最も強力なのは Reflect.ownKeys です。これは、Symbol と列挙不可能な型の両方で機能します。これは、Object.getOwnPropertyNames と Object.getOwnPropertySymbols を組み合わせたものです。

拡張機能

オブジェクト.値

オブジェクト自体のすべての列挙可能なプロパティ(シンボル型を除く)の値の配列を取得します。

リスト7

オブジェクト.values(obj).map((val)=>{
    コンソールログ(val);
});
/*
列挙可能なプロパティ 1 を所有する
列挙可能なプロパティ 2 を所有する
*/

オブジェクト.エントリ

オブジェクト自体のすべての列挙可能なプロパティ(シンボル型を除く)のキーと値のペアの配列を取得します。

リスト7

オブジェクト.entries(obj).map((val)=>{
    コンソールログ(val);
});
/*
[ 'job1', '列挙可能な属性 1 を所有' ]
[ 'job2', '列挙可能な属性 2 を所有する' ]
*/

所有プロパティ

オブジェクトのプロパティに指定されたプロパティが含まれているかどうかを確認し、ブール値を返します。

MDNから引用: JavaScriptはhasOwnPropertyプロパティ名を保護しないので、オブジェクトがこのプロパティ名のプロパティを持つ可能性があるので、プロトタイプチェーンでhasOwnPropertyメソッドを直接使用します。

コードリスト8

for(var attr in obj){
    (Object.prototype.hasOwnProperty.call(obj,attr)) の場合{
        console.log("独自の属性: :",attr);
    }それ以外{
        console.log("継承された属性: :",attr);
    }
}
/*
独自のプロパティ:: job1
独自のプロパティ:: job2
継承されたプロパティ:: 名前
*/

プロパティは列挙可能

指定されたオブジェクト内のプロパティが列挙可能かどうかを確認し、ブール値を返します。

コードリスト9

Reflect.ownKeys(obj).map((attr) => {
    Object.prototype.propertyIsEnumerable.call(obj, attr) の場合 {
        console.log("列挙可能なプロパティ: :", attr);
    } それ以外 {
        console.log("列挙できない属性: :", attr);
    }
});
/*
列挙可能なプロパティ:: job1
列挙可能なプロパティ:: job2
列挙不可能なプロパティ:: アドレス
列挙可能なプロパティ:: シンボル (列挙可能なシンボルを所有)
列挙不可能なプロパティ:: シンボル (列挙不可能なシンボルを所有)
*/

参照する

MDN オブジェクト

要約する

これで、JavaScript でオブジェクトをトラバースする 5 つの方法についての記事は終了です。JavaScript でオブジェクトをトラバースすることに関する関連コンテンツをさらにご覧になりたい場合は、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • jsでオブジェクトのプロパティと値を走査するメソッド
  • Javascript 配列と辞書の使用法とオブジェクト属性のトラバーサルスキル
  • JS オブジェクトをトラバースする 5 つの方法
  • オブジェクトのプロパティを走査する js コード
  • JS でオブジェクト プロパティを簡単にトラバースする方法の概要
  • JS における配列とオブジェクトのトラバースの違いと、オブジェクト、配列、プロパティを再帰的にトラバースする方法の詳細な説明
  • js オブジェクトメソッドの例で属性値を取得するための簡単なトラバーサル
  • JS再帰トラバーサルオブジェクトを使用して値を取得する方法
  • js内のオブジェクトのプロパティと値を走査する

<<:  Docker ビルド kubectl イメージ実装手順

>>:  CSS の position 属性の値に関する研究 (概要)

推薦する

MySQL マスタースレーブ構築(複数のマスターと 1 つのスレーブ)の実装アイデアと手順

背景:最近、同社のプロジェクトは同時実行のプレッシャーに耐えられないようなので、最適化が差し迫ってい...

Linux ファイル記述子、ファイルポインタ、および inode の詳細

目次Linux - ファイル記述子、ファイルポインタ、インデックスノード1. Linux - ファイ...

vue3 のさまざまなファイルタイプのプレビュー機能の例

目次序文1. オフィス文書の種類のプレビュー2. PDF形式のプレビュー3. 画像の種類4. ビデオ...

RPM パッケージを使用して MySQL 5.7.18 をインストールするチュートリアル

システム:セントOS7 RPM パッケージ: mysql-コミュニティクライアント-5.7.18-1...

Docker Compose で環境変数を参照する方法の例

プロジェクトでは、さまざまな条件や使用シナリオを制御するために、docker-compose.yml...

MySQL における楽観的ロック、悲観的ロック、MVCC の包括的な分析

序文データベースの実際の使用では、データの書き込みや読み取りを同時に行わないことが必要な状況によく遭...

HTML のセルパディングとセルスペース属性を図で説明します

セル - 表の内容 セルの余白 (表の余白) (cellpadding) - セルの外側の距離を表し...

Node-Redを使用してMySQLデータベースに接続する方法

Node-red をデータベース (mysql) に接続するには、まずコンピューターに MySQL ...

MySQL 2級コンピュータ試験共通テストポイント 8つのMySQLデータベース設計最適化方法

MySQLデータベース設計の8つの最適化方法の詳細は次のとおりです。 1. 最も適切なフィールド属性...

Vueが学生管理機能を実装

この記事では、学生管理を実装するためのVueの具体的なコードを例として紹介します。具体的な内容は次の...

Innodb システムテーブルスペースのメンテナンス方法

環境説明:実行中の MySQL 環境があります。以前の構成ファイルの設定が単純すぎたため (inno...

カラフルな時計効果を実現する JavaScript キャンバス

キャンバスを使ってカラフルな時計を書いてみよう! 1. タイトル(1)時計のケースが与えられ、ページ...

MySQLとOracleの誤解の詳細な説明

目次本質的な違いデータベースセキュリティ権限スキーマの移行パターンオブジェクトの類似性スキーマオブジ...

人気の宇宙飛行士ウォッチフェイスをJavaScriptで実装するための完全なコード

1. エフェクト表示JavaScript で書かれた宇宙飛行士のウォッチフェイス。 http://x...

phpmyadmin を使用して MySQL 権限を設定する方法

目次ステップ 1: root ユーザーとしてログインします。ステップ 2: 新しいデータ テーブルを...