在JavaScript中,可以使用以下方法来统计数组中重复元素的数量并获取其他相关数据:
function countDuplicates(array) {
// 创建一个对象来存储每个knowledgeId的信息,包括重复数量和其他数据
var counts = {};
// 遍历数组,计算每个knowledgeId的重复数量和其他数据
array.forEach(function(item) {
var knowledgeId = item.knowledgeId;
if (!counts[knowledgeId]) {
counts[knowledgeId] = { count: 1, data: [] };
} else {
counts[knowledgeId].count++;
}
counts[knowledgeId].data.push({ knowledgeName: item.knowledgeName });
});
// 创建一个新数组来存储结果
var resultArray = [];
// 将counts对象转换为数组形式,并保留原对象的其他参数
for (var knowledgeId in counts) {
if (counts.hasOwnProperty(knowledgeId)) {
resultArray.push({
knowledgeId: knowledgeId,
count: counts[knowledgeId].count,
knowledgeName: array.find(item => item.knowledgeId == knowledgeId)?.knowledgeName || ''
});
}
}
return resultArray;
}
以上代码中,countDuplicates
函数接受一个数组作为参数,该数组包含多个对象,每个对象都有knowledgeId
和knowledgeName
属性。函数通过遍历数组,计算每个knowledgeId
的重复数量和其他数据,并将结果存储在一个新数组resultArray
中返回。
具体步骤如下:
- 创建一个空对象
counts
,用于存储每个knowledgeId
的信息。 - 遍历数组,对于每个对象,获取其
knowledgeId
属性,并判断该属性在counts
对象中是否存在。- 如果不存在,表示是第一次遇到该
knowledgeId
,则在counts
对象中创建一个新的属性,其值为一个包含count
和data
的对象。count
初始化为1,data
初始化为空数组。 - 如果存在,表示已经遇到过该
knowledgeId
,则将该knowledgeId
对应的count
属性值增加1。 - 无论是第一次遇到还是已经遇到过,都将当前对象的
knowledgeName
属性值添加到对应knowledgeId
的data
数组中。
- 如果不存在,表示是第一次遇到该
- 创建一个空数组
resultArray
,用于存储最终的结果。 - 遍历
counts
对象,将其转换为数组形式,并保留原对象的其他参数。对于每个knowledgeId
,将其和对应的count
属性值、以及从原数组中找到的对应knowledgeId
的knowledgeName
属性值组成一个新的对象,添加到resultArray
中。 - 返回
resultArray
作为最终结果。