Javascript—从对象数组中获取数据

Javascript—从对象数组中获取数据,javascript,ecmascript-6,Javascript,Ecmascript 6,我得到了这个样本数据 "array" : [ {"Id" : "1", "preferred" : false}, {"Id" : "1", "preferred" : true }, {"Id" : "2", "preferred" : false}, {"Id" : "2", "preferred" : false},] 我想从中解脱出来 "array2":[{"Id": 1, numOfTrue: 1, numOfFalse: 1},{"Id": 2

我得到了这个样本数据

"array" : [
    {"Id" : "1", "preferred" : false}, 
    {"Id" : "1", "preferred" : true }, 
    {"Id" : "2", "preferred" : false}, 
    {"Id" : "2", "preferred" : false},]
我想从中解脱出来

"array2":[{"Id": 1, numOfTrue: 1, numOfFalse: 1},{"Id": 2, numOfTrue: 0, numOfFalse: 2}]
到目前为止,我得到的是一种如何从初始数组中获取唯一id的方法

const unique = [...new Set(array.map(item => Id))];
下一步将是数组上的一些forEach,比较Id值并为该布尔值设置一些计数器。因此,在深入研究forEach解决方案之前,我想问一下,是否有其他方法可以使用.filter和.reduce方法。

您可以使用reduce来构建一个设置为Id的分组对象。每次看到该Id时,都会在相应的键处增加值。最后,数组将是对象。对象的值:

让数组=[ {Id:1,首选:false}, {Id:1,首选:true}, {Id:2,首选:false}, {Id:2,首选:false} ] let counts=array.reducecounts,{Id,preferred}=>{ //如果您尚未看到此Id,请重新输入 if!counts[Id]counts[Id]={Id,numOfTrue:0,numOfFalse:0} //增加适当的值: 如果首选计数为[Id]。numOfTrue++ else计数[Id]。numOfFalse++ 返回计数 }, {} //获取对象的值数组:
console.logObject.valuesconts要获取的数据在要获取数据的数组中不存在。@ScottMarcus-我认为他的意思是numOfTrue是具有该id且具有首选:true值的记录数,numOfFalse也是如此。