Sort array of points based on how close they are to a givin point
Install the package locally within you project folder with your package manager:
With npm
:
npm install sort-by-distance
With yarn
:
yarn add sort-by-distance
With pnpm
:
pnpm add sort-by-distance
Call the function providing the origin
point and an array of other points as arguments:
import { sortByDistance } from 'sort-by-distance'
const points = [
{ x: 3, y: 5},
{ x: 80, y: 34},
{ x: 3, y: 7},
{ x: 22, y: 88},
{ x: 100, y: 60},
]
const origin = { x: 50, y: 50}
console.log(sortByDistance(origin, points))
//[ { x: 80, y: 34, distance: 34 },
// { x: 22, y: 88, distance: 47.20169488482379 },
// { x: 100, y: 60, distance: 50.99019513592785 },
// { x: 3, y: 7, distance: 63.702433234531945 },
// { x: 3, y: 5, distance: 65.06919393998976 } ]
You can also change the name of the x
and y
:
import { sortByDistance } from 'sort-by-distance'
const points = [
{ longitude: 3, latitude: 5},
{ longitude: 80, latitude: 34},
{ longitude: 3, latitude: 7},
{ longitude: 22, latitude: 88},
{ longitude: 100, latitude: 60},
]
const opts = {
yName: 'latitude',
xName: 'longitude'
}
const origin = { longitude: 4, latitude: 22}
console.log(sortByDistance(origin, points, opts))
//[ { longitude: 3, latitude: 7, distance: 15.033296378372908 },
// { longitude: 3, latitude: 5, distance: 17.029386365926403 },
// { longitude: 22, latitude: 88, distance: 68.41052550594829 },
// { longitude: 80, latitude: 34, distance: 76.94153624668537 },
// { longitude: 100, latitude: 60, distance: 103.24727599312246 } ]
The object is cloned and the distance
from the origin
point is added as an property of the new object.
The module exports a single function with the signature:
sortByDistance(originPoint, arrayOfPoints, options)
Is an object containing x
and y
properties.
Is an array of objects containing x
and y
properties.
The options available and their defaults:
{
yName: 'y', // Name of the y property to look for on the object
xName: 'x' // Name of the x property to look for on the object
type: 'linear' // "linear" or "haversine";
}
For all configuration options, please see the API docs.
Got an idea for a new feature? Found a bug? Contributions are welcome! Please open up an issue or make a pull request.