d3plus-common
Version:
Common functions and methods used across D3plus modules.
22 lines • 807 B
JavaScript
/**
@function unique
@desc ES5 implementation to reduce an Array of values to unique instances.
@param {Array} arr The Array of objects to be filtered.
@param {Function} [accessor] An optional accessor function used to extract data points from an Array of Objects.
@example <caption>this</caption>
unique(["apple", "banana", "apple"]);
@example <caption>returns this</caption>
["apple", "banana"]
*/
export default function (arr) {
var accessor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (d) {
return d;
};
var values = arr.map(accessor).map(function (d) {
return d instanceof Date ? +d : d;
});
return arr.filter(function (obj, i) {
var d = accessor(obj);
return values.indexOf(d instanceof Date ? +d : d) === i;
});
}