1

CrunchBase API からの JSON オブジェクトを使用して、特定の企業からの情報を取得しています。現在、JSON オブジェクトを調べて、投資家のリストを作成しようとしています。投資家は、次の 3 つのカテゴリのいずれかに分類できます"company", "financial_org", or "person"。3 つのタイプすべてが同じリストに追加されます。finalInvestorList

スクリプトはエラーなしで実行されますが、最初にリストされたラウンドからの投資家のリストしか生成しません。役立つと思われるものはすべて記録しました。ログは同じ行のコメントにあります。

基本的に私の問題は、ループが 1 回だけであるため、最初のラウンドから投資家を追加するだけであるということです。どんな助けでも大歓迎です。さらに情報が必要な場合はお知らせください。

  var investorList = function(data, num) {
        var fundingRounds = data["funding_rounds"];
        var finalInvestorList = []
        console.log(fundingRounds.length) // 3


        for (i=0; i < fundingRounds.length; i++) {
            var investments = data["funding_rounds"][i]["investments"];
            console.log(data["funding_rounds"][1]["investments"]); //correctly logs the index 1 round for spling (2nd round)
            var round = data["funding_rounds"][i];
            console.log('round' + i); //only logs round0, never loops around for round1, round2
            for (i=0; i < investments.length; i++) {

                var angelObject = round["investments"][i]["person"];
                if (angelObject != null) {
                    console.log("angel fired"); //fires for "Mitch Blumenfeld"
                    var angel = angelObject["first_name"] + " " + angelObject["last_name"];
                    finalInvestorList[i] = angel;
                }

                var financialOrgObject = round["investments"][i]["financial_org"];
                if (financialOrgObject != null) {
                    console.log("financial_org fired"); //fires for "Bucknell Venture Plan Competition"
                    console.log(financialOrgObject['name']); //Bucknell VPC
                    var financialOrg = financialOrgObject["name"]
                    finalInvestorList[i] = financialOrg
                }

                var companyObject = round['investments'][i]["company"];
                if (companyObject != null) {
                    console.log('company fired'); //i haven't bothered with this yet.. just logging it so ill know if its firing
                }
            }
        }
        console.log(finalInvestorList); //["Bucknell Venture Plan Competition", "Mitch Blumenfeld"]

    }

データで表される JSON オブジェクトは次のとおりです。必要な部分だけ短くしています。JSON 応答データ内のオブジェクトは data["funding_rounds"] で表されます。このデータは crunch API を使用して取得され、http://api.crunchbase.com/v/1/company/spling で完全な形式で見つけることができます。 js

"funding_rounds":
  [{"round_code": "seed",
    "source_url": "",
    "source_description": "",
    "raised_amount": 50000.0,
    "raised_currency_code": "USD",
    "funded_year": 2011,
    "funded_month": 2,
    "funded_day": 1,
    "investments":
     [{"company": null,
       "financial_org":
        {"name": "Bucknell Venture Plan Competition",
         "permalink": "bucknell-venture-plan-competition",
         "image": null},
       "person": null},
      {"company": null,
       "financial_org": null,
       "person":
        {"first_name": "Mitch",
         "last_name": "Blumenfeld",
         "permalink": "mitch-blumenfeld",
         "image": null}}]},
   {"round_code": "seed",
    "source_url": "http://techcrunch.com/2011/09/08/dreamit-ventures-launches-its-fall-2011-philadelphia-class/",
    "source_description": "",
    "raised_amount": 25000.0,
    "raised_currency_code": "USD",
    "funded_year": 2011,
    "funded_month": 9,
    "funded_day": 1,
    "investments":
     [{"company": null,
       "financial_org":
        {"name": "DreamIt Ventures",
         "permalink": "dreamit-ventures",
         "image":
          {"available_sizes":
            [[[150,
               57],
              "assets/images/resized/0002/7773/27773v5-max-150x150.jpg"],
             [[250,
               96],
              "assets/images/resized/0002/7773/27773v5-max-250x250.jpg"],
             [[251,
               97],
              "assets/images/resized/0002/7773/27773v5-max-450x450.jpg"]],
           "attribution": null}},
       "person": null}]},
   {"round_code": "a",
    "source_url": "http://techcrunch.com/2011/12/05/new-content-sharing-network-spling-launches-announces-400k-series-a/",
    "source_description": "New Content Sharing Network Spling Launches, Announces $400K Series A",
    "raised_amount": 400000.0,
    "raised_currency_code": "USD",
    "funded_year": 2011,
    "funded_month": 12,
    "funded_day": 5,
    "investments":
     [{"company": null,
       "financial_org":
        {"name": "Deep Fork Capital",
         "permalink": "deep-fork-capital-2",
         "image":
          {"available_sizes":
            [[[150,
               20],
              "assets/images/resized/0008/0167/80167v1-max-150x150.png"],
             [[250,
               34],
              "assets/images/resized/0008/0167/80167v1-max-250x250.png"],
             [[450,
               62],
              "assets/images/resized/0008/0167/80167v1-max-450x450.png"]],
           "attribution": null}},
       "person": null},
      {"company": null,
       "financial_org": null,
       "person":
        {"first_name": "John",
         "last_name": "Ason",
         "permalink": "john-ason",
         "image": null}},
      {"company": null,
       "financial_org": null,
       "person":
        {"first_name": "Mitchell",
         "last_name": "Blumenfeld",
         "permalink": "mitchell-blumenfeld",
         "image": null}},
      {"company": null,
       "financial_org": null,
       "person":
        {"first_name": "Gianni",
         "last_name": "Martire",
         "permalink": "gianni-martire",
         "image":
          {"available_sizes":
            [[[138,
               150],
              "assets/images/resized/0006/3720/63720v4-max-150x150.jpg"],
             [[230,
               250],
              "assets/images/resized/0006/3720/63720v4-max-250x250.jpg"],
             [[414,
               450],
              "assets/images/resized/0006/3720/63720v4-max-450x450.jpg"]],
           "attribution": ""}}}]}]

助けてくれてありがとう!

4

1 に答える 1

3

各ループのカウンターに同じ変数名を使用しているため、内側のループが完了し、外側のループが2回目の反復に到達すると、iinvestments.lengthではなく、になり1ます。ループごとに異なる変数名を使用します。

for (var roundIdx = 0; roundIdx < fundingRounds.length; roundIdx++) {
    ...
    for (var invIdx = 0; invIdx < investments.length; invIdx++) {
        ...

array[i] = valueまた、表記を使用して配列にデータを入力するのではなく、を使用してくださいarray.push(value)。インデックスを追跡する必要はありません。

Array.forEach()ただし、角括弧表記の代わりにドット構文を使用して配列を繰り返すことをお勧めします。

function investorList(data, num) {
    var finalInvestorList = [];
    data.funding_rounds.forEach(function (round, i) {
        round.investments.forEach(function (investment, i) {
            if (investment.person) {
                finalInvestorList.push(investment.person.first_name + " " +
                                       investment.person.last_name);
            }
            else if (investment.financial_org) {
                finalInvestorList.push(investment.financial_org.name)
            }
            else if (investment.company) {
                finalInvestorList.push(investment.company.name)
            }
        }
    }
}

ネイティブにサポートされていない古いブラウザの場合は、ここの実装Array.forEach()を使用してブラウザをシムします。

于 2012-05-09T22:20:58.770 に答える