I have a JSON object from the CrunchBase API giving me a bunch of info from a given company. Right now I am trying to go through the JSON object and create a list of their investors. The investors can fall into one of three categories, "company", "financial_org", or "person". All three types will be appended to the same list, finalInvestorList
The script runs without error, but only produces a list of investors from the first listed round. I have logged everything I think might help. the logs are in same-line comments.
Basically my problem is that it is only looping through one time, and therefor only adding the investors from the first round. Any help would be greatly appreciated. Let me know if you need more info!
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"]
}
The JSON object represented by the data is as follows
I have shortened it with just the bit needed. The object inside the JSON response data is represented by data[“funding_rounds”]
this data was retrieved using the crunch API and can be found in full form at 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": ""}}}]}]
Thanks for the help!
You are using the same variable name for the counter in each loop, so when the inner loop completes and the outer loop gets to its second iteration,
iisinvestments.length, not1. Use different variable names for each loop:Also, don’t populate your array using
array[i] = valuenotation, just usearray.push(value). You don’t need to keep track of the indexes.But, I’d recommend iterating your arrays using
Array.forEach()and using dot syntax instead of square bracket notation:For older browsers that don’t natively support
Array.forEach(), use the implementation here to shim the browser.