【问题标题】:Find object in array with next lower value在数组中查找具有下一个较低值的对象
【发布时间】:2020-04-05 15:13:35
【问题描述】:

我需要使用权重值获取数组中下一个较低的对象。

const data = [
  { weight: 1, size: 2.5 },
  { weight: 2, size: 3.0 },
  { weight: 4, size: 3.5 },
  { weight: 10, size: 4.0 },
  { weight: 20, size: 5.0 },
  { weight: 30, size: 6.0 }
]

如果权重是19,我需要得到对象{ weight: 10, size: 4.0 }

通过这种尝试,我确实得到了最接近的对象,但我总是需要获得具有下一个最低值的对象。如果 weight 小于 1,则应返回第一个元素。

const get_size = (data, to_find) => 
  data.reduce(({weight}, {weight:w}) =>
     Math.abs(to_find - w) < Math.abs(to_find - weight) ? {weight: w} : {weight}
  )

【问题讨论】:

  • 对象的权重是否像问题中那样按顺序排列?
  • @CertainPerformance 是的。

标签: javascript arrays object reduce


【解决方案1】:

如果对象的权重是有序的,就像在问题中一样,一种选择是从数组的末尾进行迭代。第一个匹配的对象将是您想要的。

如果下面的.find 没有返回任何内容,则与|| data[0] 交替以获取数组中的第一项:

const data = [
  { weight: 1, size: 2.5 },
  { weight: 2, size: 3.0 },
  { weight: 4, size: 3.5 },
  { weight: 10, size: 4.0 },
  { weight: 20, size: 5.0 },
  { weight: 30, size: 6.0 }
]

const output = data.reverse().find(({ weight }) => weight < 19) || data[0];
console.log(output);

(如果你不想变异data,你可以先.slice它)

【讨论】:

  • 如果我使用 1 或更小的浮点值的权重值进行搜索,我会得到未定义的结果。相反,我需要返回第一个对象
猜你喜欢
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 2022-10-25
  • 2019-12-16
  • 2021-12-06
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
相关资源
最近更新 更多