javascript - 如何优雅地寻找元素?

标签 javascript

给定以下名为 cluster 的数组,有什么优雅的方法来获取距离最小值的对象?抱歉,我是个 JS 新手。

var clusters = []

clusters.push({
  description:"Frankfurt",
  distance:18492.53622406789,
  id:"ahcg4_rnrCJ2kQJ-BkP3v4JS",
  url:"https://frankfurt.example.com",
  name:"eu-central-1"
})

clusters.push({
    description:"Oregon",
    distance:11471.556955008904,
    id:"6RazgBDmGW0GBAyokoLFNyYp",
    manager_url:"https://oregon.example.com",
    name:"us-west-2"
})

必须有一种比传统的 for 循环更优雅的方法,即使用 reduce 或类似的方法?例如我该如何将其写成一个带有reduce的单行代码?或者同样简单的事情

最佳答案

要找到最小值,根据定义,您必须访问每个元素。访问每个元素都涉及某种迭代,无论是 for 循环还是 reduce,如下所示:

clusters.reduce(
  (smallest, cluster) => cluster.distance < smallest.distance ? cluster : smallest);

您还可以考虑按距离对数组进行排序并获取结果的第一个(最小)元素:

clusters.slice().sort((x, y) => x.distance - y.distance)[0]

但是,这所做的工作比您真正需要的要多。

如果您有数十万个这样的对象,另一种选择是缓存具有最小值的元素,并在将元素添加到数组时更新它。

let clusterWithSmallestDistance;

function addCluster(cluster) {
  if (!clusterWithSmallestDistance || 
    cluster.distance < clusterWithSmallestDistance.distance)
      clusterWithSmallestDistance = cluster;
  clusters.push(cluster);
}

关于javascript - 如何优雅地寻找元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42966209/

相关文章:

javascript - 未找到 ExtJS renderTo 元素

javascript - 在 ReactJS 中更新数组中对象的最佳方法是什么?

javascript - 使用 Controller 方法选择 Angular 选项卡

javascript - 保存字体文件以供离线查看

javascript - redux-observable - 在单个史诗中调度多个 redux 操作

php - 使用来自同一网站上其他页面的超链接定位特定选项卡

javascript - Featherlight.js - 如何更新已经打开的 featherlight iframe 的属性

javascript - 尝试修复元素的高度,以便在悬停时正确突出显示

javascript - 使用 jquery 引导表单验证

javascript - 防止 AjaxToolkit Accordion 打开