我有一个来自CrunchBase API的JSON对象,它给了我一堆给定公司的信息。现在我正在尝试浏览JSON对象并创建他们的投资者列表。投资者可以分为三类,"company", "financial_org", or "person"
。所有三种类型都将附加到同一列表finalInvestorList
脚本运行没有错误,但只生成第一轮上市的投资者列表。我记录了我认为可能有用的一切。日志在同一行注释中。
基本上我的问题是它只是循环一次,因此只会增加第一轮的投资者。任何帮助将不胜感激。如果您需要更多信息,请告诉我们!
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响应数据中的对象由数据[“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": ""}}}]}]
感谢您的帮助!
答案 0 :(得分:3)
您在每个循环中对计数器使用相同的变量名称,因此当内循环完成且外循环进入第二次迭代时,i
为investments.length
,而不是{{1} }。为每个循环使用不同的变量名称:
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)
}
}
}
}
的旧版浏览器,请使用the implementation here来填充浏览器。