Javascript 使用数组方法从数组中获取最常用的值

Javascript 使用数组方法从数组中获取最常用的值,javascript,Javascript,我有一个对象数组 const doggos=[ {姓名:'邋遢',品种:'拉布拉多',年龄:3岁,训练:真}, {姓名:'Charlie',品种:'Poodle',年龄:8岁,训练有素:正确}, {姓名:'Shandy',品种:'Bulldog',年龄:2岁,训练:假}, {姓名:'Mossy',品种:'Border Collie',年龄:3岁,训练:true}, {姓名:'Winston',品种:'Bulldog',年龄:12岁,训练:假}, {名字:'Humphrey',品种:'Jack R

我有一个对象数组

const doggos=[
{姓名:'邋遢',品种:'拉布拉多',年龄:3岁,训练:真},
{姓名:'Charlie',品种:'Poodle',年龄:8岁,训练有素:正确},
{姓名:'Shandy',品种:'Bulldog',年龄:2岁,训练:假},
{姓名:'Mossy',品种:'Border Collie',年龄:3岁,训练:true},
{姓名:'Winston',品种:'Bulldog',年龄:12岁,训练:假},
{名字:'Humphrey',品种:'Jack Russel',年龄:5岁,受过训练:真的},
{姓名:'Spike',品种:'Boxer',年龄:10岁,训练:true},
{姓名:'Hunter',品种:'German Pointer',年龄:3岁,训练:true},
{姓名:'Marlo',品种:'Labrador',年龄:4岁,训练:假},
{姓名:'Dave',品种:'Bulldog',年龄:7岁,训练有素:正确}
];
我想展示最受欢迎的狗品种。 如何使用.map.filter.sort或任何其他数组方法来实现这一点


我的目标是简单地改进我的javascript

您可以使用
.reduce()
创建一个
映射
,其中使用每个
品种
作为一个键,使用一个值作为到目前为止看到的出现次数。对于
doggos
中的每只狗,您可以检查该品种当前是否存在于地图中,如果不存在,则将该品种添加为一个键,并将其关联的出现值设置为1,如果它确实存在,则可以添加到当前出现值。要获取最大值,可以使用
Math.max()
,然后使用
.find()
获取最大值作为其出现值的条目:

const doggos=[{姓名:'Scruffy',品种:'Labrador',年龄:3岁,训练过的:true},{姓名:'Charlie',品种:'Poodle',年龄:8岁,训练过的:true},{姓名:'Shandy',品种:'Bulldog',年龄:2岁,训练过的:false},{姓名:'Mossy品种:'Border Collie年龄:3岁,训练过的:true},{姓名:'Winston',品种:'Bulldog',年龄:12岁,训练过的:false},{姓名:'Humphrey',品种:'Jack Russel',年龄:5岁,受过训练:真},{姓名:'Spike',品种:'Boxer',年龄:10岁,受过训练:真},{姓名:'Hunter',品种:'German Pointer',年龄:3岁,受过训练:真},{姓名:'Marlo',品种:'Labrador',年龄:4岁,受过训练:假},{姓名:'Dave',品种:'Bulldog',年龄:7岁,受过训练:真};
const entries=[…doggos.reduce((m,{breed})=>m.set(breed,(m.get(breed)| | 0)+1),newmap)];
const max=Math.max(…entries.map([[uu,amt])=>amt));
const[most_popular]=entries.find(([[uu,amt])=>amt==max);
console.log(最流行);
const doggos=[
{姓名:'邋遢',品种:'拉布拉多',年龄:3岁,训练:真},
{姓名:'Charlie',品种:'Poodle',年龄:8岁,训练有素:正确},
{姓名:'Shandy',品种:'Bulldog',年龄:2岁,训练:假},
{姓名:'Mossy',品种:'Border Collie',年龄:3岁,训练:true},
{姓名:'Winston',品种:'Bulldog',年龄:12岁,训练:假},
{名字:'Humphrey',品种:'Jack Russel',年龄:5岁,受过训练:真的},
{姓名:'Spike',品种:'Boxer',年龄:10岁,训练:true},
{姓名:'Hunter',品种:'German Pointer',年龄:3岁,训练:true},
{姓名:'Marlo',品种:'Labrador',年龄:4岁,训练:假},
{姓名:'Dave',品种:'Bulldog',年龄:7岁,训练有素:正确}
];
设finalObj={};
doggos.forEach(dog=>{
let breedCount=finalObj[狗的品种]| | 0;
breedCount+=1;
finalObj[犬种]=繁殖数量;
});
const maxbride=Object.entries(finalObj).reduce((最终,当前)=>{
如果(当前[1]>最终[1])返回电流;
返回最终结果;
});
const resultDoggos=doggos.filter(dog=>dog.bride==maxbride[0]);
console.log(resultDoggos)
const doggos=[
{姓名:'邋遢',品种:'拉布拉多',年龄:3岁,训练:真},
{姓名:'Charlie',品种:'Poodle',年龄:8岁,训练有素:正确},
{姓名:'Shandy',品种:'Bulldog',年龄:2岁,训练:假},
{姓名:'Mossy',品种:'Border Collie',年龄:3岁,训练:true},
{姓名:'Winston',品种:'Bulldog',年龄:12岁,训练:假},
{名字:'Humphrey',品种:'Jack Russel',年龄:5岁,受过训练:真的},
{姓名:'Spike',品种:'Boxer',年龄:10岁,训练:true},
{姓名:'Hunter',品种:'German Pointer',年龄:3岁,训练:true},
{姓名:'Marlo',品种:'Labrador',年龄:4岁,训练:假},
{姓名:'Dave',品种:'Bulldog',年龄:7岁,训练有素:正确}
];
const result=Object.entries(doggos.map(e=>e.bread).reduce((acc,e)=>acc[e]?{……acc[e]:acc[e]+1}:{……acc[e]:1},{})).sort((a,b)=>b[1]-a[1])[0];

log(`bride:${result[0]},Count:${result[1]}`);
什么是“最流行”的定义?是年龄越大越好?还是受过训练?@Isaac我想是最频繁的。是的,我的意思是最频繁的。在这个例子中,答案是“斗牛犬”。我不认为你只使用映射、筛选和排序来计算发生率。Opps我想OP希望得到斗牛犬在数组中的结果哈哈。@Isaac你可能是正确的,不太确定输出应该是什么样子的