给定以下名为 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/