У меня есть следующий json для обработки:
[
{
"id": "device1",
"name": "dev1",
"status": "online",
"pool": "pool1",
"ports": [
{
"id": "port1",
"status": "online"
},
{
"id": "port2",
"status": "offline"
},
{
"id": "port3",
"status": "online"
}
]
},
{
"id": "device2",
"name": "dev2",
"status": "online",
"pool": "pool2",
"ports": [
{
"id": "port1",
"status": "offline"
},
{
"id": "port2",
"status": "offline"
},
{
"id": "port3",
"status": "online"
}
]
}
]
И мне нужно посчитать количество портов для каждого пула, я думал о чем-то вроде этого:
внутри устройств. jsx:
fetchDevices(props) {
Promise.all([
getDevices() //=> This func fetchs and return the json
]).then(results => {
let devices = flatten(results)
if (props.filter) {
devices = filter(devices, this.props.filter)
}
let pools = chain(devices)
.groupBy('pool')
.map((value, key) => ({
name: key,
devices: chain(value).filter(device => ['online','offline'].includes(device.status)).value()
}))
.values()
.map(pool => Object.assign(pool,
{
ports: countBy(pool.devices, 'ports'),
portsCount: pool.devices.reduce((memo, device) => memo + device.ports, 0)
})
)
.value()
}
...
}
Позже, в коде, который я пытаюсь отобразить portsCount:
<div><span className="value">{pool.portsCount}</span> {pool.portsCount === 1 ? 'port' : 'ports'}</div>
, когда я запускаю код, я не получаю никакого значения, код в порядке? или я что-то здесь упускаю?
в основном я хочу обработать:
var arr = [
{
"id":"device1",
"pool":"pool1",
"ports": [
{
"id": "port1",
"status": "online"
},
{
"id": "port2",
"status": "offline"
}
]
},
{
"id":"device2",
"pool":"pool2",
"ports": [
{
"id": "port1",
"status": "offline"
}
]
}
];
и с groupBy и .map получить portsCount для каждого пула, какие-либо идеи?