gpt4 book ai didi

javascript - 对数组中的值进行分组和计数

转载 作者:可可西里 更新时间:2023-11-01 02:30:40 30 4
gpt4 key购买 nike

我有一个包含对象的数组,如下所示。

b = {
"issues": [{
"fields": {
"status": {
"id": "200",
"name": "Backlog"
}
}
}, {
"fields": {
"status": {
"id": "202",
"name": "close"
}
}
}, {
"fields": {
"status": {
"id": "201",
"name": "close"
}
}
}]
};

我想统计有多少问题的状态为close,有多少问题为backlog。我想将计数保存在一个新数组中,如下所示。

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}。对于每个元素,我们检查是否已经有 name 的条目。如果不是,则创建一个计数为 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;
}

注释。

  1. Array#reduce 不修改原始数组。
  2. 您可以轻松修改传递给 reduce 的函数,例如通过更改

    不区分 Backlogbacklog
    var name = c.fields.status.name;

    进入

    var name = c.fields.status.name.toLowerCase();

    例如。还可以轻松实现更多高级功能。

关于javascript - 对数组中的值进行分组和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44387647/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com