首页 > 解决方案 > Javascript - 从值数组中查找线段的长度

问题描述

我正在做一个项目,该项目需要我解析一组值的数组,并计算出线段的长度。

我拥有的数组的形式是每个元素都是一个元组(xCoordinate, yCoordinate)

[[1.4,2.8],[2.3,2.2],[3.2,1.6],[3.8,1.1]]

我想计算数组元素 1 (1.4,2.8)和 2之间的线段长度(2.3,2.2),然后是 2 和 3、3 和 4 等。此外,如果可能的话,我想避免使用 for 循环,以尝试增强我的知识函数式编程,来自 Java 背景。

我知道我可能必须将两个值都解析为映射函数,并执行如下计算sqrt((y2-y1)^2+(x2-x1)^2))

xyDistance()写了一个函数:

function xyDistance(from,to){
    var xy=from.split(",");
    var x1=xy[0];
    var y1=xy[1];
     
    var xy=to.split(",");
    var x2=xy[0];
    var y2=xy[1];
    var dt = Math.sqrt((x2-x1)**2+(y2-y1)**2);
    return dt;
}

当我手动输入坐标时,这似乎工作正常。然后我想我想要类似的东西

var map = arr.map(arr[x] => xyDistance(arr[x],arr[x+1]))

但这会引发错误。

标签: javascriptarraysline

解决方案


您可以使用Array#slice删除最后一个元素,然后使用Array#mapwithMath.hypot来查找相邻线段之间的距离。

const arr = [[1.4,2.8],[2.3,2.2],[3.2,1.6],[3.8,1.1]];
const res = arr.slice(0, -1)
   .map(([x, y], idx)=>Math.hypot(x - arr[idx + 1][0], y - arr[idx + 1][1]));
console.log(res);


推荐阅读