gpt4 book ai didi

javascript - 比较两个对象以获得百分比

转载 作者:行者123 更新时间:2023-12-03 03:06:52 25 4
gpt4 key购买 nike

我试图弄清楚是否有办法使用 array.map() 来做到这一点

我有两个位置列表(WOL、SYD、MEL 等),其中一个包含每个位置中所有设备作为子级的站点总数,另一个仅包含出错的设备。

我需要查找每个站点出错的设备相对于每个站点的设备总数的百分比。

有没有办法使用 uniqueSitesCount.map(...) 来做到这一点?我整个周末都在查看文档,并试图在在这里提问之前找出答案,但到目前为止还没有成功。

uniqueSitesCountNotOk - 仅包含错误设备的位置数组添加到“devices”子数组中:

[ { site: 'CBR',
devices: [ [Object], [Object], [Object], [Object], [Object], [Object] ] },
{ site: 'MEL',
devices: [ [Object], [Object], [Object], [Object], [Object] ] },
{ site: 'SYD', devices: [] },
{ site: 'WOL', devices: [] } ]

uniqueSitesCount - 包含所有对象的位置数组

[ { site: 'CBR',
devices: [ [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object] ] },
{ site: 'MEL',
devices: [ [Object], [Object], [Object], [Object], [Object] ] },
{ site: 'SYD', devices: [ [Object], [Object], [Object], [Object], [Object] ] },
{ site: 'WOL', devices: [ [Object], [Object], [Object], [Object], [Object] ] } ]

功能:

为了清楚起见,将uniqueSitesCount[i].count编辑为uniqueSitesCount[i].devices.length

var getSiteErrorPercentage = function(uniqueSitesCount, uniqueSitesCountNotOk) {
for (var i = 0; i < uniqueSitesCount.length; i++) {
if (uniqueSitesCountNotOk[i].devices.length > 0) {
console.log(`${uniqueSitesCount[i].site} - ${(uniqueSitesCountNotOk[i].devices.length / uniqueSitesCount[i].devices.length* 100).toFixed(2)}%`)
} else {
console.log(uniqueSitesCount[i].site + ' - 0%')
}
}
}

最佳答案

我会考虑快速循环uniqueSitesCount来创建一个直接将站点映射到对象计数的对象。像这样的东西:

var uniqueSitesCount = [ 
{ site: 'CBR', devices: [[],[],[],[],[],[],[],[],[],[],[] ] },
{ site: 'MEL', devices: [[],[],[],[],[] ] },
{ site: 'SYD', devices: [[],[],[],[],[] ] },
{ site: 'WOL', devices: [[],[],[],[],[] ] }
]

var counts = uniqueSitesCount.reduce((acc, cur) => {
acc[cur.site] = cur.devices.length
return acc
}, {})

计数看起来像:

{ CBR: 11, MEL: 5, SYD: 5, WOL: 5 }

这样,您就可以映射错误并创建一个具有如下百分比的数组:

var uniqueSitesCount = [ 
{ site: 'CBR', devices: [[],[],[],[],[],[],[],[],[],[],[] ] },
{ site: 'MEL', devices: [[],[],[],[],[] ] },
{ site: 'SYD', devices: [[],[],[],[],[] ] },
{ site: 'WOL', devices: [[],[],[],[],[] ] }
]

var uniqueSitesCountNotOk = [
{ site: 'CBR', devices: [ [], [], [], [], [], [] ] },
{ site: 'MEL', devices: [ [], [], [], [], [] ] },
{ site: 'SYD', devices: [] },
{ site: 'WOL', devices: [] }
]

var counts = uniqueSitesCount.reduce((acc, cur) => {
acc[cur.site] = cur.devices.length
return acc
}, {})

var percents = uniqueSitesCountNotOk.map(item => {
var n = item.devices.length / counts[item.site] * 100
return {site:item.site, count: n}
})

console.log(percents)

或者,您可以避免使用 count 对象,但每次都必须搜索 uniqueSitesCount 对象:

var percents = uniqueSitesCountNotOk.map(item => {
var site = uniqueSitesCount.find(i => i.site === item.site )
var n = item.devices.length / site.devices.length * 100
return {site:item.site, count: n}
})

关于javascript - 比较两个对象以获得百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47127688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com