如何使用JavaScript的every()方法在数组中将一个元素与其他所有元素进行比较?

3

我的情况是这样的,我有一个对象,它有一个'x''y'属性。该点还有一个getDistance()方法,用于计算两个点之间的距离。

例如:

if (position.getDistance(prevPosition) > 10) {
    // add new Point
} else {
    // don't add new Point
}

我有一个点阵数组,需要检查新点是否与数组中的所有其他点距离太近。查看Javascript文档后,every()方法似乎是使用的基本函数,但我在实现上遇到了困难。

function getDistance(position, prevPosition) {
    return position.getDistance(prevPosition) > 10;
}

if (points.every(position)) {
    // add new Point
} else {
    // don't add Point
}

任何帮助都将不胜感激


3
points.every(point => point.getDistance(position) > 10) 可以翻译为:对于所有的点,如果这些点到给定的位置的距离大于10,则返回true。 - junvar
2个回答

4

.every接收一个函数,数组中的每个元素都会被传递到该函数中(在您的情况下,每个点都会被传递),然后您必须返回一个谓词(即它是否很远):

  points.every(position => position.getDistance(newPoint) > 10)

点数组是一个对象数组,但我只需要比较数组中每个元素的位置属性,这是否可能? - Ricardo Sanchez
当然,那是一个常规的属性访问。 - Jonas Wilms
是的,我通过调用segments.some(position => position.point.getDistance(newPoint) > 10)来对其进行排序。谢谢。 - Ricardo Sanchez

1
这是使用every函数的方法:

let a = [1,2,3,4];

let areAllPositive = a.every(num => num > 0); // true
let areAllOdd = a.every(num => num % 2); // false

console.log(areAllPositive);
console.log(areAllOdd);

在您的使用情况下,它将是: let allPointsAreFarEnough = points.every(point => point.getDistance(position) > 10) 这段代码的含义是检查所有点是否与位置之间的距离都大于10。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接