Javascript 比较两个对象以获得百分比
我试图找出是否有一种方法可以使用array.map()实现这一点 我有两个位置列表(WOL、SYD、MEL等),其中一个位置包含每个位置中所有设备都是子设备的站点总数,另一个位置仅包含出错的设备 我需要找到每个站点的错误设备百分比,与每个站点的设备总数相比 有没有一种方法可以使用UniqueSiteScont.map(…)实现这一点?我整个周末都在查阅文档,试图在这里提问之前弄清楚,但到目前为止都失败了Javascript 比较两个对象以获得百分比,javascript,arrays,node.js,ecmascript-6,Javascript,Arrays,Node.js,Ecmascript 6,我试图找出是否有一种方法可以使用array.map()实现这一点 我有两个位置列表(WOL、SYD、MEL等),其中一个位置包含每个位置中所有设备都是子设备的站点总数,另一个位置仅包含出错的设备 我需要找到每个站点的错误设备百分比,与每个站点的设备总数相比 有没有一种方法可以使用UniqueSiteScont.map(…)实现这一点?我整个周末都在查阅文档,试图在这里提问之前弄清楚,但到目前为止都失败了 uniquesitesontonotok-位置数组,其中只有错误添加到“设备”子数组的设备:
uniquesitesontonotok
-位置数组,其中只有错误添加到“设备”子数组的设备:
[ { site: 'CBR',
devices: [ [Object], [Object], [Object], [Object], [Object], [Object] ] },
{ site: 'MEL',
devices: [ [Object], [Object], [Object], [Object], [Object] ] },
{ site: 'SYD', devices: [] },
{ site: 'WOL', devices: [] } ]
UniqueSiteScont
-包含所有对象的位置数组
[ { 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] ] } ]
功能:
编辑:uniquesitesunt[i]。计数到uniquesitesunt[i]。设备。为清晰起见,长度
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%')
}
}
}
var getSiteErrorPercentage=函数(UniqueSiteScont,UniqueSiteScontNoOK){
对于(变量i=0;i0){
console.log(`uniqueSitesCount[i].site}-${(uniqueSitesCountNotOk[i].devices.length/uniqueSitesCount[i].devices.length*100.toFixed(2)}%`)
}否则{
console.log(uniquesitesunt[i].site+'-0%')
}
}
}
< /代码> 我会考虑快速循环通过<代码> UNQuiTeStEngs< /Cord>使对象直接映射站点到对象的计数。比如:
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 uniquesitesunt=[
{站点:'CBR',设备:[[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]},
{站点:'MEL',设备:[[]、[]、[]、[]、[]、[]、[]]},
{站点:'SYD',设备:[[]、[]、[]、[]、[]、[]、[]]},
{站点:'WOL',设备:[[]、[]、[]、[]、[]、[]、[]}
]
变量UniqueSiteScontNotok=[
{站点:'CBR',设备:[[]、[]、[]、[]、[]、[]、[]、[]、[]]},
{站点:'MEL',设备:[[]、[]、[]、[]、[]、[]、[]]},
{站点:'SYD',设备:[]},
{站点:'WOL',设备:[]}
]
var计数=唯一地点减少((acc,cur)=>{
acc[当前站点]=当前设备长度
返回acc
}, {})
var percents=UniqueSiteScontNotok.map(项目=>{
var n=item.devices.length/计数[item.site]*100
返回{site:item.site,计数:n}
})
log(percents)
Wellmap
用于映射,IOW:它将返回一些东西,您的代码不返回任何东西,只返回控制台日志。相反,您可能会考虑使用forEach
。答案是肯定的。有理由使用地图吗?在回调中使用带有find的filter似乎更容易。虽然很难帮助[object]摆脱tbh。您只需要计算设备数组中的对象数,还是每个对象都有一个您需要计算的数字?@Keith,它将返回百分比,当前仅使用Console.Log()进行计算testing@DLowther-我不仅仅是过滤。我已经对一个数组进行了筛选,以仅使设备出错。我想做的是显示出错设备与总设备的百分比谢谢,非常感谢:)对JS的功能方面和较新的ES2015语法仍然是陌生的,所以现在我试着了解map、reduce和filter。干杯