javascript – 对数组中的值进行分组和计数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 对数组中的值进行分组和计数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1689字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 对数组中的值进行分组和计数](/upload/InfoBanner/zyjiaocheng/706/cca170f9e90b4a8e85308e3d218d924a.jpg)
我有一个包含对象的数组,如下所示.
b = {
"issues": [{
"fields": {
"status": {
"id": "200",
"name": "Backlog"
}
}
}, {
"fields": {
"status": {
"id": "202",
"name": "close"
}
}
}, {
"fields": {
"status": {
"id": "201",
"name": "close"
}
}
}]
};
我想计算有多少问题已经关闭,有多少有积压.我想将计数保存在一个新数组中,如下所示.
a = [
{Name: 'Backlog', count: 1},
{Name: 'close', count: 2}
];
我尝试了以下内容.
b.issues.forEach(function(i) {
var statusName = i.fields.status.name;
if (statusName in a.Name) {
a.count = +1;
} else {
a.push({
Name: statusName,
count: 1
});
}
});
然而,这似乎并没有起作用.我该如何实现呢?
解决方法:
这是使用Array#reduce的绝佳机会.该函数将采用按顺序应用于数组的所有元素的函数,并可用于累积值.我们可以使用它来累积具有各种计数的对象.
为简单起见,我们将对象中的计数跟踪为{name:count,otherName:otherCount}.对于每个元素,我们检查是否已有名称条目.如果不是,请创建一个计数为0.否则,递增计数.在reduce之后,我们可以将map存储为keys of the object的密钥数组设置为问题中描述的格式.见下文.
var b = {
"issues": [{
"fields": {
"status": {
"id": "200",
"name": "Backlog"
}
}
}, {
"fields": {
"status": {
"id": "202",
"name": "close"
}
}
}, {
"fields": {
"status": {
"id": "201",
"name": "close"
}
}
}]
};
var counts = b.issues.reduce((p, c) => {
var name = c.fields.status.name;
if (!p.hasOwnProperty(name)) {
p[name] = 0;
}
p[name]++;
return p;
}, {});
console.log(counts);
var countsExtended = Object.keys(counts).map(k => {
return {name: k, count: counts[k]}; });
console.log(countsExtended);
.as-console-wrapper {
max-height: 100% !important;
}
笔记.
> Array#reduce不会修改原始数组.
>您可以轻松修改传递给reduce的函数,例如通过更改来区分Backlog和backlog
var name = c.fields.status.name;
成
var name = c.fields.status.name.toLowerCase();
例如.还可以轻松实现更高级的功能.
内容总结
以上是互联网集市为您收集整理的javascript – 对数组中的值进行分组和计数全部内容,希望文章能够帮你解决javascript – 对数组中的值进行分组和计数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。