在javascript中查找对象中键值对的频率

在javascript中查找对象中键值对的频率,javascript,arrays,object,frequency,find-occurrences,Javascript,Arrays,Object,Frequency,Find Occurrences,想象我有一个物体 teaherList = [ {teacherID:1,teacherName:"john"}, {teacherID:2,teacherName:"joe"}, {teacherID:3,teacherName:"jill"}, {teacherID:1,teacherName:"john"}, {teacherID:2,teacherName:"joe"}, {teacherID:3,teacherName:"jill"}, {teacherID:1,teacherName

想象我有一个物体

teaherList = [
{teacherID:1,teacherName:"john"},
{teacherID:2,teacherName:"joe"},
{teacherID:3,teacherName:"jill"},
{teacherID:1,teacherName:"john"},
{teacherID:2,teacherName:"joe"},
{teacherID:3,teacherName:"jill"},
{teacherID:1,teacherName:"john"},
{teacherID:2,teacherName:"joe"},
{teacherID:3,teacherName:"jill"},
]
现在,我如何在对象teacherList中找到每个[teacherID:,teacherName:]的频率

我现在做的是,

let temp = []
_.each(teaherList, function(k){
   temp.push(k.teacherID)
)

let count1 = countBy(temp);
它给出了教师在对象中出现的频率,但有没有更好、更有效的方法来完成这项任务

let temp = []
_.each(teaherList, function(k){
   temp.push(k.teacherID)
)

let count1 = countBy(temp);
console.log(count1) // object
//(1:3,2:3,3:3)

请告诉我是否有更好的方法来解决这个问题,假设
teaherList
是一个对象数组,这里有一个方法不需要依赖于库,还可以使用
reduce
一次性创建输出对象(总迭代次数=数组长度):

const teaherList=[
{teacherID:1,teacherName:“john”},
{teacherID:2,teacherName:“joe”},
{teacherID:3,teacherName:“吉尔”},
{teacherID:1,teacherName:“john”},
{teacherID:2,teacherName:“joe”},
{teacherID:3,teacherName:“吉尔”},
{teacherID:1,teacherName:“john”},
{teacherID:2,teacherName:“joe”},
{teacherID:3,teacherName:“吉尔”},
];
console.log(
减少((a,{teacherName})=>(
赋值(a,{[teacherName]:(a[teacherName]| | 0)+1})
), {})

);我稍微修改了这个teaherList,因为它不是有效的对象。您可以尝试这样的方法,结果数组将如下所示[{teacherID1:teacherName1},{teacherID2:teacherName2}]

var teaherList=[
{teacherID:1,teacherName:“john”},
{teacherID:2,teacherName:“joe”},
{teacherID:3,teacherName:“吉尔”},
{teacherID:1,teacherName:“john”},
{teacherID:2,teacherName:“joe”},
{teacherID:3,teacherName:“吉尔”},
{teacherID:1,teacherName:“john”},
{teacherID:2,teacherName:“joe”},
{teacherID:3,teacherName:“吉尔”},
]
var结果=teaherList.reduce(功能(acc、cV){
如果(!acc[cV.教师姓名]){
acc[cV.teacherName]={teacherID:cV.teacherID,
教师姓名:cV.teacherName,
计数:1};
}否则{
acc[cV.teacherName].count++;
}
返回acc;
}, {});
控制台日志(结果)您可以在没有开销的情况下为每个循环分配对象并返回对象

var teacherList=[{teacherID:1,teacherName:“约翰”},{teacherID:2,teacherName:“乔”},{teacherID:3,teacherName:“吉尔”},{teacherID:1,teacherName:“约翰”},{teacherID:2,teacherName:“乔”},{teacherID:3,teacherName:“吉尔”},{teacherID:1,teacherName:“约翰”},{teacherID:3,teacherName:“吉尔”},
频率=Object.create(空);
forEach(({teacherName})=>frequency[teacherName]=(frequency[teacherName]| | 0)+1);

console.log(frequency);
这里有另一种使用while循环的方法

teacherList=[{teacherID:1,teacherName:“约翰”},{teacherID:2,teacherName:“乔”},{teacherID:3,teacherName:“吉尔”},{teacherID:1,teacherName:“约翰”},{teacherID:2,teacherName:“乔”},{teacherID:3,teacherName:“吉尔”},{teacherID:1,teacherID:“约翰”},{;
const calculateFrequencies=({input,output=Object.create(null),id,name,
开始:i=0,结束=input.length})=>{
而(iconsole.log(calculateFrequencies({input:teacherList}));
这是
teacherList
对象有效吗?正确吗?是的,这是一个有效的对象我很确定你的意思是要有一个对象数组,例如
{teacherID:1,teacherName:“john”},
-你现在的语法无效。你说得对{teacherID:1,teacherName:“john”}这是有效的语法,我的朋友,代码只是将键绑定到它的值,所需的输出类似于[{teacherID:1 teacherName:“john”,count:3},{teacherID:2 teacherName:“Joe”,count:3},{teacherID:3 teacherName:“jill”,count:3}]@Navenkariyappa得到了!!我会尝试得到它。