查找对象数组的最小值
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]);
【讨论】:
其实不需要三元运算符,只需要减法以上是关于查找对象数组的最小值的主要内容,如果未能解决你的问题,请参考以下文章