UNPKG

geotoolbox

Version:

geotoolbox is GIS javascript library. It is based on d3geo, topojson and geos-wasm.

44 lines (37 loc) 1.38 kB
import { isarrayofobjects, isgeojson } from "./helpers/helpers.js"; /** * @function dedupe * @summary Deletes duplicates. Keeps the first element. * @param {object|array} data - A GeoJSON FeatureCollection or an array of objects * @param {object} options - Optional parameters * @param {number} [options.key] - id to consider * @param {boolean} [options.mutate = false] - Use `true` to update the input data. With false, you create a new object, but the input object remains the same. * @returns {object|array} - A GeoJSON FeatureCollection or an array of objects. (it depends on what you've set as `data`). * @example * geotoolbox.dedupe(*a geojson or an array of objects*, {key: "ISO3"}) */ export function dedupe(data, { key, mutate = false } = {}) { let x = data; if (isgeojson(x)) { if (!mutate) { x = JSON.parse(JSON.stringify(data)); } const values = [...new Set(x.features.map((d) => d?.properties[key]))]; let arr = []; values.forEach((e) => { arr.push(x.features.find((d) => d?.properties[key] == e)); }); x.features = arr; } else if (isarrayofobjects(x)) { const values = [...new Set(x.map((d) => d[key]))]; let arr = []; values.forEach((e) => { arr.push(x.find((d) => d[key] == e)); }); x = arr; if (mutate) { data.splice(0, data.length, ...x); } } return x; }