【问题标题】: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}

标签: javascript arrays object min


【解决方案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]);

    【讨论】:

    • 其实不需要三元运算符,只需要减法
    猜你喜欢
    • 2015-03-15
    • 2018-04-08
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2021-09-15
    • 2015-04-09
    相关资源
    最近更新 更多