在JavaScript数组中查找最接近的对象匹配

在JavaScript数组中查找最接近的对象匹配,javascript,arrays,algorithm,sorting,object,Javascript,Arrays,Algorithm,Sorting,Object,我有一个未排序对象的数组: const participants = [ {code: '222222', is_winner: true}, {code: '444444', is_winner: false}, {code: '777777', is_winner: false}, {code: '555555', is_winner: true}, {code: '666666', is_winner: false}, {code: '111

我有一个未排序对象的数组:

const participants = [
    {code: '222222', is_winner: true},
    {code: '444444', is_winner: false},
    {code: '777777', is_winner: false},
    {code: '555555', is_winner: true},
    {code: '666666', is_winner: false},
    {code: '111111', is_winner: false},
    {code: '333333', is_winner: false},
];
对于参与者,如何找到最近的对象,即\u winner key为true,即\u winner key始终为false

if participant = {code: '333333', is_winner: false} 
=> 
Should return {code: '555555', is_winner: true}

if participant = {code: '444444', is_winner: false} 
=> 
Should return {code: '222222', is_winner: true}

我希望得到一个已经获奖的参与者,这是一个最接近非获奖者的参与者。数组是非圆形的

这是我根据你问题中的信息所作的回答

常数参与者=[ {代码:'2222222',是_winner:true}, {代码:'444444',是_winner:false}, {代码:'777777',是_winner:false}, {代码:'555555',是_winner:true}, {代码:'666666',是_winner:false}, {代码:'111111',是_winner:false}, {代码:'333333',是_winner:false}, ]; 函数findClosestWinnercode,参与者{ let index=participants.findIndexparticipant=>{ return participant.code==代码 } 让胜利者 让awayDown=0 让awayUp=0 对于设x=index-1;x>=0;x-{ 让currentParticipant=参与者[x] awayDown+=1 如果currentParticipant.com是赢家{ 获胜者=当前参与者 打破 } } 对于let x=index+1;x如果currentParticipant.is_winner&&awayUp您可以在一个循环中完成。添加了注释,但主体很简单,在监视赢家并存储它的同时循环,直到找到匹配的代码。找到代码后,您将搜索一个更高的赢家。如果找到,则查找最接近的赢家

比赛中可能会出现一些胜利者的情况,但由于您没有在示例中解决这些问题,我将假装它们不存在,并让您为它们编程

让findCloseWinner=代码,参与者=>{ var low=-1,codeIx=-1; forvar i=0;i i-codeIx{ 返回参与者[i]; }否则{ 返回参与者[低]; } } } } //如果没有找到代码,或者我们从未找到下限,那么我们就完成了 ifcodeIx==-1 | |低===-1返回空值 //循环期间未找到上界,low必须为winner 返回参与者[低]; } 风险值参与者=[ {代码:'2222222',是_winner:true}, {代码:'444444',是_winner:false}, {代码:'777777',是_winner:false}, {代码:'555555',是_winner:true}, {代码:'666666',是_winner:false}, {代码:'111111',是_winner:false}, {代码:'333333',是_winner:false}, ]; 控制台。logfindCloseWinner'333333',参与者; 控制台。logfindCloseWinner“444444”,参与者 这可以是:

const data=[{code:'2222222',is_winner:true},{code:'444444',is_winner:false},{code:'777777',is_winner:false},{code:'555555',is_winner:true},{code:'66666666',is_winner:false},{code:'111111',is_winner:false},{code:'333333 is_winner:false},]; 设fn=c,arr=>{ 设i=arr.findIndexx=>x.code==c return data.slice0,i.reverse.findx=>x.is\u } console.logfn'333333',数据//555555
logfn'444444',data//2222更接近333333。你的逻辑不正确sense@chrispbacon我明白你的意思。我希望只找到相邻的参与者,而不是再次在阵列上循环。在这种情况下,您是正确的,222222比555555更接近333333。@chrispback为什么假设数组是圆形的?我认为这不是一个公平的假设。你的问题太不清楚了。您是否可以对其进行编辑,以反映您希望发生的事情、上述评论中的任何约束以及预期结果?