获取属于JavaScript / Node js中的部分ID的数组对象的数量

nod*_*man 3 javascript arrays sorting node.js

我有一个这样的数组数组:

var array = [ 
    [ '2','Yes'],
    [ '2','Yes'],
    [ '2','Yes'],
    [ '3','Yes'],
    [ '3','Yes'],
    [ '4','Yes'],
]
Run Code Online (Sandbox Code Playgroud)

上面的数组(2,3和4)中的ID动态来自服务器响应。我需要计算特定ID的条目数。我无法弄清楚如何遍历此数组以获取预期的输出。预期的输出是:

[{"ID" : "4", Count : "1"},{"ID" : "3", Count : "2"},{"ID" : "2",Count : "3"}]
Run Code Online (Sandbox Code Playgroud)

请注意,输出按Count的升序排列。

这是我尝试的:

var temp1 = [];
                var temp2 = [];
                var temp3 = [];
                for(var i = 0; i < array.length; ++i){
                     if(array[i][0] == 2){
                        temp1.push(array[i])
                     }
                     if(array[i][0] == 1){
                        temp2.push(array[i])
                     }
                     if(array[i][0] == 3){
                        temp3.push(array[i])
                     }

                }

 var output = [{
                    ID: "2",
                    Count: temp1.length,
                },
                {
                    ID: "1",
                    Count: temp2.length,
                },
                {
                    ID: "3",
                    Count: temp3.length
                }]

console.log(output)
Run Code Online (Sandbox Code Playgroud)

我相信,如果数据是动态的,我做的方法不是最好的方法。我怎样才能更好地做到这一点?

Rob*_*sen 7

结合使用Array.prototype.reduce()Object.entries()Array.prototype.sort()Array.prototype.map()会产生这样的:

const array = [ 
    [ '2','Yes'],
    [ '2','Yes'],
    [ '2','Yes'],
    [ '3','Yes'],
    [ '3','Yes'],
    [ '4','Yes'],
];

const result = Object.entries(array.reduce((a, [id]) => {
  a[id] = (a[id] || 0) + 1;
  return a;
}, {})).map(([ID, Count]) => ({ID, Count}))
       .sort((a, b) => a.Count - b.Count);

console.log(result);
Run Code Online (Sandbox Code Playgroud)