2011-08-17 3 views
0

チュートリアルはここにある:Tutorial: Writing Spreadsheet data using JavaScript Objectsアプリケーションスクリプトチュートリアル混乱

完全なコードは、チュートリアルの最後で見つけることができます。

私は場合-statement内で何が起こっているかを得ることはありません

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); 
    } 

最初の関数内のループのため、runExample()を得ることはありません。 何を意味するのですかdataByDepartment [rowData.department] ???

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

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

PS:私はあなたがそこに取得している私は常にオブジェクトとプロパティの作品で混乱していますCプログラミング...

答えて

1
を必要とするのであれば掲載し

を評価します

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

いくつかの背景には、次の文は、最初はプロパティを持つオブジェクトを作成します。

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

var dataByDepartment = {}; 

あなたは言うでしょう、そのオブジェクトに値「VALUE1」とプロパティ「キー1」を割り当てるには

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

(この場合は「KEY2」)と評価されたものは何でも myKeyに等しい名前のプロパティを作成します
var myKey = "key2"; 
dataByDepartment[myKey] = "value2"; 

を、値「VALUE2」:だからあなたが言うことができます。

if (!dataByDepartment[rowData.department]) { 

dataByDepartmentが既にrowData.departmentにあるものと同じキー名を持つプロパティを持っているかどうかをチェックしている:

だから、あなたが引用実際のコードに戻すif文を取得します。構文は if (dataByDepartment[rowData.department] != undefined)にほぼ相当するショートカットです。

ifの最初の文:

dataByDepartment[rowData.department] = []; 

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

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

departments.push(rowData.department); 

は最後に、if後、dataByDepartment[rowData.department]によって参照される配列は、新たな要素が追加しました:

dataByDepartment[rowData.department].push(rowData); 
+0

素晴らしい説明。本当に私は歩いて歩いていった。完全に理解される。ありがとう兄貴! – CppLearner

1

から来る... JavaScriptにまだかなり新しいです。

dataByDepartment[rowData.department] 

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

キーが存在する場合、それは未定義ではありません - それは、を評価します。キーが存在しない場合、それは、未定義である - それは文がこの

if (!dataByDepartment[myKey]) { 

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

と同じである場合、あなたがより明確に:)

+1

キーが存在しない場合は、 'null'ではなく' undefined'ですが、もちろんfalsyとして評価されます。 'undefined == null'は真ですが、' undefined === null'はfalseです。 – nnnnnn

+0

素敵で短い紹介と説明をありがとう。簡潔にする。良い仕事:)ありがとうたくさんのマーティン。 – CppLearner

+1

@nnnnnn正しいですか。申し訳ありませんが、私は注意を払っていませんでした(編集されます) – martin