在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作为最终结果。