查找对象数组的最小值

Posted

技术标签:

【中文标题】查找对象数组的最小值【英文标题】:Finding lowest value of an array of objects 【发布时间】:2021-12-28 10:03:53 【问题描述】:

我目前正在制作一个有障碍物的游戏,我想找到 X 值最低的物体。 这是一个数组的例子。

var array = [x:500, y:400, x:80, y:400, x:900, y:400];

我希望能够确定该组中最低的 X (80) 并将其返回给我。 有没有办法做到这一点?

【问题讨论】:

使用排序,然后根据排序顺序选择第一个/最后一个。 这能回答你的问题吗? Sort array of objects by string property value 看看这个:array.sort(( x: x1 , x: x2 ) => x1 - x2)[0] // x: 80, y: 400 【参考方案1】:

你可以使用 lodash

var array = [
  x: 500,
  y: 400
, 
  x: 80,
  y: 400
, 
  x: 900,
  y: 400
];
console.log(_.minBy(array, 'x'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

【讨论】:

您还可以建议非库解决方案吗?既然 lodash 没有被使用,也没有被要求?【参考方案2】:

let min = Infinity
for (var i=0; i<array.length; i++)
    if (array[i].x<min) min = array[i].x

这里 min 是你的答案。可能有更简单的方法可以做到这一点,但他可以完成工作。

【讨论】:

【参考方案3】:

您不需要对数组进行排序或使用外部库。您可以使用Array.prototype.reduce 在线性时间内找到具有最小x 的对象:

const array = [x:500, y:400, x:80, y:400, x:900, y:400];
const minX = array.reduce((acc, curr) => curr.x < acc.x ? curr : acc, array[0] || undefined);
console.log(minX)

【讨论】:

我更喜欢这个而不是排序 请注意空数组,因为例外:'减少没有初始值的空数组' @FFire 是的。更新为在使用空数组时不会抛出错误【参考方案4】:

排序并获得第一个

var arr = [
  x: 500,
  y: 400
, 
  x: 80,
  y: 400
, 
  x: 900,
  y: 400
];
arr.sort((a, b) => a.x < b.x ? -1 : (a.x > b.x ? 1 : 0));
console.log(arr[0]);

【讨论】:

其实不需要三元运算符,只需要减法

以上是关于查找对象数组的最小值的主要内容,如果未能解决你的问题,请参考以下文章

使用聚合和查找 mongodb 从对象数组中获取最小值

通过数组对象值mongodb查找对象[重复]

在Javascript中的对象数组中查找值[重复]

键数组,在 json 对象中查找值

从 JavaScript 数组中获取对象值的最大值和最小值

如何在 JavaScript 中的对象数组中查找值?