如何计算数组内对象的不同值

问题描述 投票:1回答:3

在一个数据库中,我有两个列:idvalue。我想查看我的id中有多少不同的result,我该怎么做?

我试图想出一个解决方案,但我没有成功更多的countDifferentId(){// do some magic calculations}

result看起来像这样:

[ RowDataPacket {
    id: 76561198115203520,
    value: 73 },
  RowDataPacket {
    id: 76561198115029751,
    value: 73 }
  RowDataPacket {
    id: 76561198115702984,
    value: 73 },
  RowDataPacket {
    id: 76561198115203520,
    value: 73 } ]

所以countDifferentId()的结果应该是3

mysql node.js
3个回答
3
投票

如果你想在javascript端完成这项工作,请转到:

const rowDataPackets = [
    {
        id: 76561198115203520,
        value: 73
    },
    {
        id: 76561198115029751,
        value: 73
    },
    {
        id: 76561198115702984,
        value: 73
    },
    {
        id: 76561198115203520,
        value: 73
    }
];


function countDifferentId(array){
    // Object with key=id to count unique ids and value is true (or whatever)
    const uniqueIds = array.reduce((acc, data) => Object.assign(acc, {[data.id]:true}) , {});
    // Number of unique ids is the number of keys
    return Object.keys(uniqueIds).length;
}

console.log(countDifferentId(rowDataPackets));

2
投票

你不想通过查询在一个组中这样做吗?这里有很多例子。例如

https://www.w3resource.com/mysql/aggregate-functions-and-grouping/aggregate-functions-and-grouping-count-with-group-by.php

MySQL Query with count and group by

等等

如果您只有API的服务器请求,您可能需要。创建一个像{id:count}这样的哈希表


1
投票

函数从一个数组列中获取所有值并作为数组返回。

然后for循环使用数组来存储计数值,每次检查数组以确保只计算一次值。

function getCol(myarray, col){ 
    var column = []; 
    for(var i=0; i<myarray.length; i++){ 
        column.push(myarray[i][col]); 
    } 
    return column; 
    }

    cols = getCol(result, 'id');
    var count = 0;
    var used = [];
    for(var i = 0; i<cols.length;i++){
         if(!used.indexOf(cols[i])){
               used.push(cols[i]);
               count++;
         }
     }
© www.soinside.com 2019 - 2024. All rights reserved.