首页 > 解决方案 > 在 JavaScript 数组中查找最接近的对象匹配

问题描述

我有一组未排序的对象:

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},
];

我如何找到最近的对象,is_winner 键为真,给定参与者,is_winner 键始终为假。

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}

我正在寻找最接近非获胜者的获胜者(is_winner 为真)。该阵列是非圆形的。

标签: javascriptarraysalgorithmsortingobject

解决方案


这可以简单地是:

const data = [ {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}, ];

let fn = (c, arr) => {
  let i = arr.findIndex(x => x.code === c)
  return data.slice(0, i).reverse().find(x => x.is_winner)
}

console.log(fn('333333', data))  // 555555
console.log(fn('444444', data))  // 222222

我们的想法是index使用提供的项目获取项目,code然后对主数组进行切片,这样你就只有项目到该索引。然后简单地反转结果并获得第一场比赛is_winner


推荐阅读