これは私のコードスニペットで、プログラムはforeachループに入りません。
var ct = new Array();
ct["me"]= {"name" : "Jakub"};
ct["you"]= {"name" : "stack"};
ct.forEach(function (c){
document.getElementById("tmp").appendChild(document.createTextNode(c));
});
配列のインデックスを文字列( "me"、 "you")から整数に変更すると、次のように機能します。
var ct = new Array();
ct[0]= {"name" : "Jakub"};
ct[1]= {"name" : "stack"};
ct.forEach(function (c){
document.getElementById("tmp").appendChild(document.createTextNode(c));
});
あらゆる種類のインデックスを持つ配列を反復処理するソリューションを実装するのを手伝ってもらえますか?私の目的は、特定の日付オブジェクトの値を格納することです。
Protovisライブラリのデータを使用し、入力として配列が必要なAFAIKを使用します。
protovisの例で使用するデータ構造は、上記のデータ構造よりも複雑です。
私のプロジェクトでは、JavaBeanを介していくつかのオブジェクトのセットを送信します。これらのオブジェクトには、とりわけ日付が含まれています。私の目的は、protovis Webサイトhttp:// vis.stanford.edu / protovis / ex / area.htmlに表示されている、これらのオブジェクトをこのようなグラフに表示することです。
時間の横軸を使用し、特定の時間のオブジェクトの数の縦軸を使用します。これが、配列を日付でソートしたい理由です。AFAIKprotovisは、デフォルトモード(関数チェーン)でのダイアグラムのデータ入力として配列のみを許可するためです。
編集:今のところ私は方法を変更しました。文字列を配列キーとして保存する代わりに、次のようにします。これが私の元のコードスニペットです:
edit2:元の入力を追加しました:var result2 = {"h":{10 "documents":[11 {12 "biographicalCategories":[13]、14 "body":"ギリシャの保守的な政府は1955年の合意の調査を命じました戦争の際に侵入するワルシャワ協定軍と戦うためのゲリラネットワークの確立のためのCIAとギリシャ軍の間。"、15"記述子 ":[16]、17" generalOnlineDescriptors ":[18]、19" guid ":0、20"見出し":"ギリシャ戦争の計画を調査する"、21"場所":[22"ギリシャ "23]、24"名前 ":[25]、26" onlineDescriptors ":[27]、 28 "onlineLocations":[29]、30 "onlineOrganizations":[31]、32 "onlinePeople":[33]、34 "onlineTitles":[35]、36 "組織":[37]、38 "人":[39]、40 "publicationDate": "1990-11-21 00:00:00.0 CET"、41 "sourceFile" :"0402635.xml"、42 "taxonomicClassifiers":[43]、44 "titles":[45]、46 "typesOfMaterial":[47]、48 "score":0.80242133 49}、
var resultTmp = new Array();
var i = 0;
var averageScore = 0;
var startDate = new Date();
var endDate = new Date(1700, 01, 01);
var docDate;
var actDate;
var tlk = new Array();
var av = 0;
var d = new Object();
result2.h.documents.forEach(function(c) {
averageScore += c.score;
if(typeof(c.publicationDate) != "undefined"){
docDate = c.publicationDate.split("-");
actDate = new Date(docDate[0], docDate[1]-1, docDate[2].split(" ")[0]);
if(actDate endDate){
endDate = actDate;
}
if(defined(tlk[actDate])){
av = tlk[actDate];
resultTmp[av].docs.push(c);
}
else {
d = new Object();
d.date = actDate;
d.docs = new Array();
d.docs.push(c);
resultTmp[i] = d;
tlk[actDate] = i;
i++;
}
}
});
i = 0;
var dates = [];
for(key in tlk){
if(key )
d = new Date(key);
if(isValidDate(d)){
dates[i] = new Date(key);
i++;
}
}
dates.sort(function (a, b) {
return a > b;
});
var ii = 0;
i = 0;
var ddocs;
var result = new Array();
for(i=0; i maxDocsPerDate){
maxDocsPerDate = d.docs.length;
}
result[i] = d;
}
edit3上記のコードは現在機能しています:
簡単に言うと、tlk配列を使用して、日付をインデックスに反映します。resultTmp配列の1つのインデックスについて、日付とその日付に関連するオブジェクトのセットを格納します。コードの次の部分では、日付を古いものから新しいものへと並べ替え、同様にresultTempを並べ替えます。resultTempのソートされたバージョンは、結果の配列にあります。
私は次の方法でprotovisでデータを提示します:
vis.add(pv.Line)
.data(result)
.lineWidth(2)
.left(function(a) x(a.date))
.bottom(function(a) y(a.docs.length))
.add(pv.Dot)
.lineWidth(function(a) a.docs.length - (a.docs.length-1)/3)
.radius(function(a) a.docs.length * (a.docs.length/1.2))
.fillStyle(function(a) color(a.docs.length))
.event("click", function(a) Popup.show(a.docs))
.anchor("top").add(pv.Label)
.text(function(a) a.docs.length)
.textBaseline("bottom");
vis.render();
例示的な結果は次のようになります。i.imgur.com/WODYA.pngx
軸とy軸を印刷するためのコード、および日付からグラフ幅にスケーリングするためのコードを含めませんでした。例は、protovisの例のページにあります。
ところで:私はその部分でなぜ混乱しています:
for(key in tlk){
dates[i] = new Date(key);
i++;
}
最後のキーとして、私は「含む」を取得しますか?インターネットで答えを見つけようとしましたが、成功しませんでした。Bearsは彼のコメントで、私がこのprobelmを取得する理由は、配列のプロパティを反復処理しているためだと説明しました。