Javascript JavsScript-通过嵌套数组循环
我有一个嵌套的金融投资组合JSON文件。我需要从所有投资组合账户的每个持有中获取证券类型(在示例JSON中,只有一个),以及每个投资组合的每个持有的合计净值,都在一个循环中 最后,我尝试使用此信息显示在一个饼图中,该饼图根据安全类型的净值进行分隔 JSON文件:Javascript JavsScript-通过嵌套数组循环,javascript,arrays,json,multidimensional-array,javascript-objects,Javascript,Arrays,Json,Multidimensional Array,Javascript Objects,我有一个嵌套的金融投资组合JSON文件。我需要从所有投资组合账户的每个持有中获取证券类型(在示例JSON中,只有一个),以及每个投资组合的每个持有的合计净值,都在一个循环中 最后,我尝试使用此信息显示在一个饼图中,该饼图根据安全类型的净值进行分隔 JSON文件: { "id": 1, "username": "Test", "portfolio_accounts": [ {
{
"id": 1,
"username": "Test",
"portfolio_accounts": [
{
"id": 1,
"user": 1,
"username": "Test",
"account_type": "IRA",
"name": "MyTestAccount",
"description": "Just a Test",
"balance": 100.00,
"holdings": [
{
"id": 1,
"portfolio_id": 2,
"security_type": "Stock",
"ticker": "GOOG",
"price": 1000.50,
"shares": 20,
"purchase_date": "02-20-2021",
"cost_basis": 800.50
},
{
"id": 2,
"portfolio_id": 2,
"security_type": "Bond",
"ticker": "AMZN",
"price": 100.99,
"shares": 4,
"purchase_date": "02-20-2021",
"cost_basis": 60.65
}
]
},
{
"id": 2,
"user": 1,
"username": "Test",
"account_type": "IRA",
"name": "MyTestAccount2 - Electric Boogaloo",
"description": "Repeat",
"balance": 100.00,
"holdings": [
{
"id": 3,
"portfolio_id": 3,
"security_type": "Bond",
"ticker": "GNMA",
"price": 530.50,
"shares": 2,
"purchase_date": "02-20-2021",
"cost_basis": 40.20
}
]
}
]
}
- 股票:(1000.50*20)=20010美元
- 债券1:(100.99*4)=403.96美元
- 债券2:(530.50*2)=1061美元
- 债券总额:1464.96美元
{
"id": 1,
"username": "Test",
"portfolio_accounts": [
{
"id": 1,
"user": 1,
"username": "Test",
"account_type": "IRA",
"name": "MyTestAccount",
"description": "Just a Test",
"balance": 100.00,
"holdings": [
{
"id": 1,
"portfolio_id": 2,
"security_type": "Stock",
"ticker": "GOOG",
"price": 1000.50,
"shares": 20,
"purchase_date": "02-20-2021",
"cost_basis": 800.50
},
{
"id": 2,
"portfolio_id": 2,
"security_type": "Bond",
"ticker": "AMZN",
"price": 100.99,
"shares": 4,
"purchase_date": "02-20-2021",
"cost_basis": 60.65
}
]
},
{
"id": 2,
"user": 1,
"username": "Test",
"account_type": "IRA",
"name": "MyTestAccount2 - Electric Boogaloo",
"description": "Repeat",
"balance": 100.00,
"holdings": [
{
"id": 3,
"portfolio_id": 3,
"security_type": "Bond",
"ticker": "GNMA",
"price": 530.50,
"shares": 2,
"purchase_date": "02-20-2021",
"cost_basis": 40.20
}
]
}
]
}
一个饼图,一种颜色的债券($1464.96),一种颜色的股票($20010),按比例填写。如果存在其他安全类型,如加密,我将需要执行相同的操作,并自动添加第三种颜色(等等)。您可以创建一个对象,将所有可能的安全类型设置为0,然后对每次保留进行求和,例如:
let数据={
“id”:1,
“用户名”:“测试”,
“投资组合账户”:[
{
“id”:1,
“用户”:1,
“用户名”:“测试”,
“账户类型”:“IRA”,
“名称”:“MyTestAccount”,
“描述”:“只是一个测试”,
“余额”:100.00,
“控股”:[
{
“id”:1,
“投资组合id”:2,
“证券类型”:“股票”,
“股票代码”:“GOOG”,
“价格”:1000.50,
“股份”:20,
“购买日期”:“2021年2月20日”,
“成本基础”:800.50
},
{
“id”:2,
“投资组合id”:2,
“证券类型”:“债券”,
“股票代码”:“AMZN”,
“价格”:100.99,
“股份”:4,
“购买日期”:“2021年2月20日”,
“成本基础”:60.65
}
]
},
{
“id”:2,
“用户”:1,
“用户名”:“测试”,
“账户类型”:“IRA”,
“名称”:“MyTestAccount2-电动Boogaloo”,
“说明”:“重复”,
“余额”:100.00,
“控股”:[
{
“id”:3,
“投资组合id”:3,
“证券类型”:“债券”,
“股票代码”:“GNMA”,
“价格”:530.50,
“股份”:2,
“购买日期”:“2021年2月20日”,
“成本基础”:40.20
}
]
}
]
};
让安全类型={
债券:0,
股票:0,
加密:0
};
data.portfolio\u accounts.forEach(portfolio\u account=>{
投资组合账户.holdings.forEach(holding=>{
证券类型[持有.证券类型]+=holding.price*holding.shares;
});
});
console.log(安全类型)代码>
const数据=
{id:1
,用户名:'Test'
,投资组合账户:
[{id:1
,使用者:1
,用户名:'Test'
,账户类型:'IRA'
,名称:“MyTestAccount”
,描述:'只是一个测试'
,结余:100.00
,持有:
[{id:1
,公文包编号:2
,安全类型:'股票'
,股票代码:'GOOG'
,售价:1000.50
,股份:20
,购买日期:'02-20-2021'
,成本基础:800.50
}
,{id:2
,公文包编号:2
,证券类型:“债券”
,股票代码:'AMZN'
,售价:100.99
,股份:4
,购买日期:'02-20-2021'
,成本基础:60.65
} ] }
,{id:2
,使用者:1
,用户名:'Test'
,账户类型:'IRA'
,名称:'MyTestAccount2-电动Boogaloo'
,描述:'重复'
,结余:100.00
,持有:
[{id:3]
,公文包编号:3
,证券类型:“债券”
,股票代码:'GNMA'
,售价:530.50
,股份:2
,购买日期:'02-20-2021'
,成本基础:40.20
} ] } ] }
,证券类型={股票:0,债券:0}
;
对于(让data.portfolio_账户的ptfAcc)
用于(出租ptfAcc.holdings的hld)
证券类型[hld.证券类型]+=(hld.price*hld.shares)
;
log(安全类型)
是灵活解决方案的忠实粉丝,下面是一个使用
//const objectScan=require('object-scan');
const data={id:1,用户名:'Test',投资组合账户:[{id:1,用户:1,用户名:'Test',账户类型:'IRA',名称:'MyTestAccount',描述:'Just a Test',余额:100.00,持股:[{id:1,投资组合id:2,证券类型:'Stock',股票代码:'GOOG',价格:1000.50,股票:20,购买日期:'02-20-2021',成本基础:800.50},{id:2,投资组合\ id:2,证券\类型:'Bond',股票代码:'AMZN',价格:100.99,股票:4,购买日期:'02-20-2021',成本基础:60.65}]},{id:2,用户:1,用户名:'Test',账户\类型:'IRA',名称:'MyTestAccount2-Electric Boogaloo',说明:'Repeat',余额:100.00,持股:[{id:3,投资组合id:3,证券类型:'Bond',股票代码:'GNMA',价格:530.50,股票:2,购买日期:'02-20-2021',成本基础:40.20}]};
const r=objectScan(['portfolio_accounts[*].holdings[*]']{
反面:错,
过滤器n:({
值:{股票、价格、证券类型:securityType},
上下文:{持有量,总计}
}) => {
const netWorth=股票*价格;
push({[securityType]:netWorth});
如果(!(安全性输入)