【发布时间】:2016-05-24 17:05:05
【问题描述】:
我有一组代表类别的数组。每个数组是一个类别,数组中的每一项都是一个主题,例如
4 Categories containing Subjects
['A','B','D']
['C']
['E','F']
['G','H','I','J']
我有另一组数组。这些项目中的每一个都有最多四个可能的主题,例如
3 Items containing Subjects
['A','F']
['E','I','C']
['E','F','G']
我想计算每个类别的项目数。在这种情况下,结果应该是:
Total Items: 3
Category 1: 1
Category 2: 1
Category 3: 3
Category 4: 2
3 项,其中一些属于多个类别。我的一些项目在一个类别中有两个主题,这就是我搞砸的地方。我的结果是:
Total Items: 3
Category 1: 1
Category 2: 1
Category 3: 4
Category 4: 2
我对第 3 类的计数减少了 1,因为我的第三个项目有两个属于同一类别的科目,E 和 F。
我的尝试
作为参考,categories 是一个对象数组:
categories = [
{ name: string, subjects: string[], count: number }
]
项目有些相似:
items = [
{ subjects: Subject[] }
]
而主题只是:
{ id: string, name: string }
这是我需要调整的:
categories.map(category =>
category.subjects.map(categorySubject => {
if(items.subjects.map(itemSubject => itemSubject.id)
.some(val => itemSubject.indexOf(val) === 0)) {
category.count++;
}
}));
我认为我的方向是正确的,但我需要找到一种方法来检查项目主题是否在类别中,同时对于一个类别中有多个主题的项目不计算两次。我知道问题出在我的方法上。我无法更改项目的格式(是的,ID 确实是字符串),但如果有更好的方法,我可以更改类别。
【问题讨论】:
标签: arrays object typescript count compare