如何解决计算 JavaScript 对象中每个类别的项目数
我有一个包含数百个对象的数组,每个对象都有一个类别。我希望返回一个列出类别的对象,并计算每个类别的项目数。
const arr = [
{id: 1,name: 'ford',category: 'vehicle'},{id: 2,name: 'pig',category: 'animal'},{id: 3,name: 'dog',{id: 4,name: 'chev',{id: 5,name: 'cat',{id: 6,name: 'jeep',{id: 7,name: 'honda',category: 'vehicle'}
]
我将如何遍历对象并创建一个仅包含两个类别以及每个类别有多少个类别的新对象?
所需的输出:
{vehicle: 4,animal: 3}
代码:
const arr = [
{id: 1,category: 'vehicle'}
]
const final = {};
arr.forEach((v) => {
const tst = v.category;
console.log(tst);
if (tst in final){
console.log('found one');
}
});
//console.log(final);
解决方法
你可以使用reduce
const arr = [
{id: 1,name: 'ford',category: 'vehicle'},{id: 2,name: 'pig',category: 'animal'},{id: 3,name: 'dog',{id: 4,name: 'chev',{id: 5,name: 'cat',{id: 6,name: 'jeep',{id: 7,name: 'honda',category: 'vehicle'}
]
const categories = arr.reduce((acc,cur) => {
acc[cur.category] = (acc[cur.category] || 0) + 1
return acc;
},{})
console.log(categories)
看起来category
会一直存在,所以你不需要检查是否它存在,而是它包含什么;获取它包含的内容并在 final
对象上增加该属性:
const arr = [
{id: 1,category: 'vehicle'}
]
const final = {};
for (const { category } of arr) {
final[category] = (final[category] || 0) + 1;
};
console.log(final);
关于循环遍历数组并检查是否已经遇到类别的想法是正确的。您缺少的是在找到新类别时初始化计数器并在下次遇到该类别时将其递增:
const arr = [
{id: 1,category: 'vehicle'}
]
const final = {};
arr.forEach((v) => {
const cat = v.category;
if (cat in final) {
final[cat]++;
} else {
final[cat] = 1;
}
});
console.log(final);
const arr = [
{ id: 1,category: 'vehicle' },{ id: 2,category: 'animal' },{ id: 3,{ id: 4,{ id: 5,{ id: 6,{ id: 7,]
// this will hold the results
const result = {}
for (const item of arr) {
// we have not encountered such category before
if (result[item.category] === undefined) {
// setting this category to 1
result[item.category] = 1
// we encountered such category before
} else {
// addint +1 to it
result[item.category] += 1
}
}
console.log(result)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。