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

时间:2018-02-07 01:23:07

标签: mysql node.js

在数据库中,我有两个列: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

3 个答案:

答案 0 :(得分: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));

答案 1 :(得分:2)

你想通过查询在一个小组中这样做吗?这里有很多例子。 e.g。

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:数 }

答案 2 :(得分: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++;
         }
     }