0

チュートリアルはこちら: チュートリアル: JavaScript オブジェクトを使用してスプレッドシート データを作成する

完全なコードは、チュートリアルの最後にあります。

最初の関数 runExample() で for ループが得られません

  for (var i = 0; i < data.length; ++i) {
    var rowData = data[i];
    if (!dataByDepartment[rowData.department]) {
      dataByDepartment[rowData.department] = [];
      departments.push(rowData.department);
    }
    dataByDepartment[rowData.department].push(rowData);
  }

ifステートメントの中で何が起こっているのかわかりません。dataByDepartment[rowData.department])とはどういう意味ですか???

dataByDepartmentは最初は空です...これはプロパティを作成していますか??

誰かがそのループ全体が何をしているのか説明してもらえますか? どうもありがとうございました!

PS: 私はまだ Javascript を初めて使用します... C プログラミングから来て、オブジェクトとプロパティの作成にいつも混乱しています...

4

2 に答える 2

1

一般的に、ループの機能は、dataByDepartment(個別の)部門ごとに1つのプロパティをオブジェクトに設定することです。ここで、各プロパティは、その部門に適用可能なデータの配列を参照します。ループを繰り返すたびに、最初に現在の部門のプロパティがすでに存在するかどうかがチェックされ、存在しない場合は作成されます。新しいプロパティを作成する必要がある場合は、部門もdepartments配列に追加します。

背景:次のステートメントは、最初はプロパティのないオブジェクトを作成します。

var dataByDepartment = {};

値「value1」のプロパティ「key1」をそのオブジェクトに割り当てるには、次のように言います。

dataByDepartment.key1 = "value1";
// or
dataByDepartment["key1"] = "value1";

「key1」というプロパティがすでに存在する場合は、上書きされることに注意してください。角括弧構文を使用すると、可変のプロパティキー名を使用できます。だからあなたは言うことができます:

var myKey = "key2";
dataByDepartment[myKey] = "value2";

myKeyこれにより、評価対象と同じ名前(この場合は「key2」)と値「value2」のプロパティが作成されます。

したがって、引用する実際のコードに戻ると、ifステートメントは次のようになります。

if (!dataByDepartment[rowData.department]) {

dataByDepartmentにあるものと等しいキー名を持つプロパティがすでにあるかどうかをチェックしていますrowData.department。構文は、とほぼ同等のショートカットif (dataByDepartment[rowData.department] != undefined)です。

if:の最初のステートメント

dataByDepartment[rowData.department] = [];

rowData.department中にあるもののキー名と新しい空の配列の値を使用して新しいプロパティを作成します。その時点で、プロパティがすでに存在している場合は、新しい空の配列、つまりifテストによって上書きされます。

の2番目のステートメントはif、部門名をdepartments配列に追加します。

departments.push(rowData.department);

最後に、の後にif、によって参照される配列dataByDepartment[rowData.department]に新しい要素が追加されます。

dataByDepartment[rowData.department].push(rowData);
于 2011-08-17T04:50:40.677 に答える
1

あなたはそこに着いています。

dataByDepartment[rowData.department]

// is the same as
var myKey = rowData.department // you can use dot or bracket notation
dataByDepartment[myKey]

キーが存在する場合、それは未定義ではなく、 trueと評価されます。キーが存在しない場合は未定義です - falseと評価されます

したがって、ifステートメントはこれと同じです

if ( !dataByDepartment[myKey]) {

// which is logically the same as (note that === does not coerce type)
if ( typeof(dataByDepartment[myKey]) === 'undefined' ) {

さらに説明が必要かどうか尋ねてください:)

于 2011-08-17T04:24:17.733 に答える