Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 比较两个对象以获得百分比_Javascript_Arrays_Node.js_Ecmascript 6 - Fatal编程技术网

Javascript 比较两个对象以获得百分比

Javascript 比较两个对象以获得百分比,javascript,arrays,node.js,ecmascript-6,Javascript,Arrays,Node.js,Ecmascript 6,我试图找出是否有一种方法可以使用array.map()实现这一点 我有两个位置列表(WOL、SYD、MEL等),其中一个位置包含每个位置中所有设备都是子设备的站点总数,另一个位置仅包含出错的设备 我需要找到每个站点的错误设备百分比,与每个站点的设备总数相比 有没有一种方法可以使用UniqueSiteScont.map(…)实现这一点?我整个周末都在查阅文档,试图在这里提问之前弄清楚,但到目前为止都失败了 uniquesitesontonotok-位置数组,其中只有错误添加到“设备”子数组的设备:

我试图找出是否有一种方法可以使用array.map()实现这一点

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

我需要找到每个站点的错误设备百分比,与每个站点的设备总数相比

有没有一种方法可以使用UniqueSiteScont.map(…)实现这一点?我整个周末都在查阅文档,试图在这里提问之前弄清楚,但到目前为止都失败了

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)
Well
map
用于映射,IOW:它将返回一些东西,您的代码不返回任何东西,只返回控制台日志。相反,您可能会考虑使用
forEach
。答案是肯定的。有理由使用地图吗?在回调中使用带有find的filter似乎更容易。虽然很难帮助[object]摆脱tbh。您只需要计算设备数组中的对象数,还是每个对象都有一个您需要计算的数字?@Keith,它将返回百分比,当前仅使用Console.Log()进行计算testing@DLowther-我不仅仅是过滤。我已经对一个数组进行了筛选,以仅使设备出错。我想做的是显示出错设备与总设备的百分比谢谢,非常感谢:)对JS的功能方面和较新的ES2015语法仍然是陌生的,所以现在我试着了解map、reduce和filter。干杯