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)
我相信,如果数据是动态的,我做的方法不是最好的方法。我怎样才能更好地做到这一点?
结合使用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)
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |