オブジェクトを辿る

Beginner

This tutorial is from open-source community. Access the source code

はじめに

この実験では、再帰を使って与えられたオブジェクトのすべてのキーを辿るジェネレータ関数を作成する概念を探ります。この実験の目的は、学習者に対して、yieldyield* 式を for...of ループと Object.keys() と組み合わせてオブジェクトのキーとその値を反復処理する方法を理解するための実践的な経験を提供することです。この実験が終了するまでに、学習者はオブジェクトを再帰的に辿り、現在のパスを表すキーの配列と対応する値を生成する方法を実際に理解するようになります。

オブジェクトのキーを辿るコード

与えられたオブジェクトのすべてのキーのリストを生成するには、次の手順を使用します。

  1. ターミナル/SSH を開き、コーディングを練習するために node と入力します。

  2. オブジェクトとキーの配列を受け取る walk と呼ばれるジェネレータ関数を定義します。再帰を使ってオブジェクトのすべてのキーを辿ります。

  3. walk 関数の中で、for...of ループと Object.keys() を使ってオブジェクトのキーを反復処理します。

  4. typeof を使って、与えられたオブジェクトの各値がそれ自体オブジェクトであるかどうかを確認します。値がオブジェクトの場合、yield* 式を使って同じジェネレータ関数 walk に再帰的に委譲し、現在の key をキーの配列に追加します。

  5. それ以外の場合、現在のパスを表すキーの配列と与えられた key の値を yield します。

  6. yield* 式を使って walk ジェネレータ関数に委譲します。

以下がコードです。

const walkThrough = function* (obj) {
  const walk = function* (x, previous = []) {
    for (let key of Object.keys(x)) {
      if (typeof x[key] === "object") yield* walk(x[key], [...previous, key]);
      else yield [[...previous, key], x[key]];
    }
  };
  yield* walk(obj);
};

コードをテストするには、オブジェクトを作成し、walkThrough 関数を使ってそのすべてのキーのリストを生成します。

const obj = {
  a: 10,
  b: 20,
  c: {
    d: 10,
    e: 20,
    f: [30, 40]
  },
  g: [
    {
      h: 10,
      i: 20
    },
    {
      j: 30
    },
    40
  ]
};
[...walkThrough(obj)];
/*
[
  [['a'], 10],
  [['b'], 20],
  [['c', 'd'], 10],
  [['c', 'e'], 20],
  [['c', 'f', '0'], 30],
  [['c', 'f', '1'], 40],
  [['g', '0', 'h'], 10],
  [['g', '0', 'i'], 20],
  [['g', '1', 'j'], 30],
  [['g', '2'], 40]
]
*/

まとめ

おめでとうございます!あなたはオブジェクトを辿る実験を完了しました。あなたのスキルを向上させるために、LabEx でさらに多くの実験を練習することができます。