首页 文章

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

提问于
浏览
0

我得到了这个样本数据 .

"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 over array并比较Id值并为该布尔值设置一些计数器 . 因此,在我深入了解每个解决方案之前,我想问一下是否有其他方法可以使用 . filter().reduce() 方法 .

1 回答

  • 1

    您可以使用 reduce() 构建一个键入 Id 的分组对象 . 每次看到 Id 再次增加相应键的值 . 最后,您的数组将是对象的 Object.values()

    let array = [
        {"Id" : "1", "preferred" : false}, 
        {"Id" : "1", "preferred" : true }, 
        {"Id" : "2", "preferred" : false}, 
        {"Id" : "2", "preferred" : false}
    ]
    
    let counts = array.reduce((counts, {Id, preferred}) => {
        // If you haven't seen this Id yet, make a new entry
        if (!counts[Id]) counts[Id] = {Id, numOfTrue: 0, numOfFalse: 0}
    
        // increment the appropriate value:
        if (preferred) counts[Id].numOfTrue++
        else counts[Id].numOfFalse++
        return counts
    }, {})
    
    // get the values array of the object:
    console.log(Object.values(counts))
    

相关问题