Javascript在字符串

时间:2018-02-07 21:26:09

标签: javascript

好的,所以我有一个这样的清单:

https://haxified.is-a-me.me/0a94f61d.png

我希望找到最接近的三个,所以例如我跑了 1539, 4502 它会找到三个最接近的值,最接近我的意思是最相似的字符串的第一个和第二个值(用逗号分隔)

我试过做一个for循环,并计算出所有这些之间的距离,但它没有用。

1 个答案:

答案 0 :(得分:1)

您的数据格式不佳。您需要一组数字数组,而不是字符串数组。所以第一项任务就是进行转换。

然后你可以使用距离公式计算到给定坐标的距离,并将其存储为列表中每个点的额外信息。

然后按该额外距离排序。对它进行排序不是最有效的方法,因为您可以先检索最小距离,然后在删除第一个之后检索最小值,最后在删除找到的第一个最小值后再次检索最小值。但如果您对此类优化感兴趣,请亲自试试。

排序后,将前三个元素切割出结果数组并返回。您可能希望将这三个项目转换回原始格式,即三个字符串的数组。

这是一个片段:



function closestThree(data, px, py) {
    return data
        .map( s => s.split(',').map(Number) ) // Convert to pairs of numbers
        .map( ([x,y]) => [x,y,(x-px)*(x-px)+(y-py)*(y-py)] ) // Add squared distance
        .sort( (a, b) => a[2] - b[2] ) // Sort by distance
        .slice(0, 3) // Get three first results
        .map( ([x, y]) => x + ',' + y ); // Convert back to strings
}

// Sample
const points = ['123,5432', '432,325', '735,1045', '583,564'];
const res = closestThree(points, 405, 630);
console.log(res);