2012-02-26 11 views
1

現在、私はJavascriptプロジェクトを作成中です。私は大きなjsonデータセットから特定のデータを取り出し、後で使用するために配列に格納する必要があります。これは、これまでの私のコードです:javascript - 配列を配列に押し込むのをやめてください。

publicationArray = [] = datafile["publications"] 
for (p in publicationArray){ 
    var publication = publicationArray[p]; 
    publicationKeywords.push (publication.keywords); 
} 

私はあなたのほとんどが出て作業することができ、これはメインのデータセットからID「出版物」ですべてのオブジェクトを取ると確信しているとして、その後のキーワードを取り、それらを介してループします個々のオブジェクトをそれぞれpublishedKeywords(コードの最初に定義された配列)に格納します。問題は、私は、フォーム内のデータを必要とするのに対し、データがフォーマット

[ [keyword1], [keyword2], [keyword3] ] 

に格納されていることであるが

[keyword1, keyword2, keyword3] 

私はJavaScriptに非常に新しいですので、私は本当に分からないものをI間違っているか、それを助けるために何を検索すべきか。私ができることは可能なのですか?もしそうなら、誰も私に解決策を教えてくれますか?

+0

本当に 'p'をグローバル変数にしようとしましたか?もしそうでなければ、それが含まれている関数に対してローカルにするために 'var'を使います。 – ThiefMaster

+0

一般的なJS初心者の落とし穴:for-inの代わりに通常forループを使用して、配列を繰り返し処理します。オブジェクトのキーを反復処理する必要がある場合にのみfor-inを使用します。 – hugomg

+0

皆さんのおかげで、ありがとう。それを行うための非常に多くの異なる方法! –

答えて

1

publication.keywordsがキーワードの配列の場合、この内側ループの内側にあるpublicationArrayに各キーワードを追加して繰り返します。ここ

for (var i = 0; i < publicationArray.length; i++) { 
     var publication = publicationArray[p]; 
     for (var j = 0; j < publication.length, j++) { 
      publicationKeywords.push(publication[j]); 
     } 
} 

推論:配列の繰り返し処理を行う場合、

var publicationArray = [] = datafile["publications"]; 
for (p in publicationArray){ 
    var publication = publicationArray[p]; 
    for (keyword in publication.keywords) { 
     publicationKeywords.push(keyword); 
    } 
} 

また、あなたはループのためにバニラを使用する必要がありますhttps://stackoverflow.com/a/3010848/187954

1

をなぜあなたはしないでください

publicationKeywords.push (publication.keywords[0]); 
1
var a = [[1],[2],[3]]; 
var b = []; 
for(var i=0,n=a.length;i<n;i++){ 
    b = b.concat(a[i]); 
} 
console.log(b); 
関連する問題